Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
tiny conflict resolution
[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   * \ingroup XBT_misc  
20   * \brief Parallel map.
21   *
22   * A function is applied to all elements of a dynar in parallel with n worker
23   * threads.
24   * The worker threads are persistent until the destruction of the parmap.
25   *
26   * If there are more than n elements in the dynar, the worker threads are
27   * allowed to fetch themselves remaining work with xbt_parmap_next() and
28   * execute it.
29   *
30   * \{
31   */
32
33 /** \brief Parallel map data type (opaque type) */
34 typedef struct s_xbt_parmap *xbt_parmap_t;
35
36 /**
37  * \brief Synchronization mode of the worker threads of a parmap.
38  */
39 typedef enum {
40   XBT_PARMAP_POSIX,          /**< use POSIX synchronization primitives */
41   XBT_PARMAP_FUTEX,          /**< use Linux futex system call */
42   XBT_PARMAP_BUSY_WAIT,      /**< busy waits (no system calls, maximum CPU usage) */
43   XBT_PARMAP_DEFAULT         /**< futex if available, posix otherwise */
44 } e_xbt_parmap_mode_t;
45
46 XBT_PUBLIC(xbt_parmap_t) xbt_parmap_new(unsigned int num_workers,
47     e_xbt_parmap_mode_t mode);
48 XBT_PUBLIC(void) xbt_parmap_destroy(xbt_parmap_t parmap);
49
50 XBT_PUBLIC(void) xbt_parmap_apply(xbt_parmap_t parmap,
51                                   void_f_pvoid_t fun,
52                                   xbt_dynar_t data);
53 XBT_PUBLIC(void*) xbt_parmap_next(xbt_parmap_t parmap);
54
55 /** \} */
56
57 SG_END_DECL()
58
59 #endif