X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a889c5815b75beb11f858bab68b2314c8dc724c2..e71a2a302d28430dc1bfee906f842f5f3d0fa3ce:/include/xbt/parmap.h diff --git a/include/xbt/parmap.h b/include/xbt/parmap.h index e941c9e2b8..e2514eee6e 100644 --- a/include/xbt/parmap.h +++ b/include/xbt/parmap.h @@ -1,46 +1,35 @@ /* A thread pool. */ -/* Copyright (c) 2007, 2009, 2010. The SimGrid Team. +/* Copyright (c) 2007-2021. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ -#ifndef _XBT_THREADPOOL_H -#define _XBT_THREADPOOL_H - -#include "xbt/misc.h" /* SG_BEGIN_DECL */ -#include "xbt/function_types.h" - -SG_BEGIN_DECL() - -/** @addtogroup XBT_threadpool - * @brief Pool of threads. - * - * Jobs can be queued and the dispacher process can wait for the completion - * of all jobs. - * The call to "queue job" is non-blocking except the maximum amount of - * queued jobs is reached. In that case, it will block until a job is taken - * by a worker - * @{ - */ - /** \brief Queue data type (opaque type) */ - -typedef struct s_xbt_tpool *xbt_tpool_t; - -XBT_PUBLIC(xbt_tpool_t) xbt_tpool_new(unsigned int num_workers, - unsigned int max_jobs); - -XBT_PUBLIC(void) xbt_tpool_queue_job(xbt_tpool_t tpool, - void_f_pvoid_t fun, - void* fun_arg); - -XBT_PUBLIC(void) xbt_tpool_wait_all(xbt_tpool_t tpool); - -XBT_PUBLIC(void) xbt_tpool_destroy(xbt_tpool_t tpool); +#ifndef XBT_PARMAP_H +#define XBT_PARMAP_H + +/** @addtogroup XBT_parmap + * @ingroup XBT_misc + * @brief Parallel map. + * + * A function is applied to all elements of a std::vector in parallel with n worker threads. The worker threads are + * persistent until the destruction of the parmap. + * + * If there are more than n elements in the vector, the worker threads are allowed to fetch themselves remaining work + * with method next() and execute it. + * + * @{ + */ + +/** @brief Synchronization mode of the worker threads of a parmap. */ +typedef enum { + XBT_PARMAP_POSIX, /**< use POSIX synchronization primitives */ + XBT_PARMAP_FUTEX, /**< use Linux futex system call */ + XBT_PARMAP_BUSY_WAIT, /**< busy waits (no system calls, maximum CPU usage) */ + XBT_PARMAP_DEFAULT /**< futex if available, posix otherwise */ +} e_xbt_parmap_mode_t; /** @} */ -SG_END_DECL() - -#endif \ No newline at end of file +#endif