Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Regenerate files with latest flexml.
[simgrid.git] / include / xbt / parmap.h
1 /* A thread pool.                                          */
2
3 /* Copyright (c) 2007, 2009, 2010. The SimGrid Team.
4  * All rights reserved.                                                     */
5
6 /* This program is free software; you can redistribute it and/or modify it
7  * under the terms of the license (GNU LGPL) which comes with this package. */
8
9 #ifndef _XBT_PARMAP_H
10 #define _XBT_PARMAP_H
11
12 #include "xbt/misc.h"           /* SG_BEGIN_DECL */
13 #include "xbt/function_types.h"
14 #include "xbt/dynar.h"
15
16 SG_BEGIN_DECL()
17
18 /** \addtogroup XBT_parmap
19   * \brief Parallel map.
20   *
21   * A function is applied to all elements of a dynar in parallel with n worker
22   * threads.
23   * The worker threads are persistent until the destruction of the parmap.
24   *
25   * If there are more than n elements in the dynar, the worker threads are
26   * allowed to fetch themselves remaining work with xbt_parmap_next() and
27   * execute it.
28   *
29   * \{
30   */
31
32 /** \brief Parallel map data type (opaque type) */
33 typedef struct s_xbt_parmap *xbt_parmap_t;
34
35 /**
36  * \brief Synchronization mode of the worker threads of a parmap.
37  */
38 typedef enum {
39   XBT_PARMAP_POSIX,          /**< use POSIX synchronization primitives */
40   XBT_PARMAP_FUTEX,          /**< use Linux futex system call */
41   XBT_PARMAP_BUSY_WAIT,      /**< busy waits (no system calls, maximum CPU usage) */
42   XBT_PARMAP_DEFAULT         /**< futex if available, posix otherwise */
43 } e_xbt_parmap_mode_t;
44
45 XBT_PUBLIC(xbt_parmap_t) xbt_parmap_new(unsigned int num_workers,
46     e_xbt_parmap_mode_t mode);
47 XBT_PUBLIC(void) xbt_parmap_destroy(xbt_parmap_t parmap);
48
49 XBT_PUBLIC(void) xbt_parmap_apply(xbt_parmap_t parmap,
50                                   void_f_pvoid_t fun,
51                                   xbt_dynar_t data);
52 XBT_PUBLIC(void*) xbt_parmap_next(xbt_parmap_t parmap);
53
54 /** \} */
55
56 SG_END_DECL()
57
58 #endif