Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
172ef6be6147491f62407e0bc3fa34654a5725af
[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 the n first elements of a dynar in parallel,
22   * where n is the number of threads. The threads are persistent until the
23   * destruction of the parmap object.
24   *
25   * If there are more than n elements in the dynar, the worker threads should
26   * fetch themselves remaining work with xbt_parmap_next() and execute it.
27   *
28   * \{
29   */
30
31 /** \brief Parallel map data type (opaque type) */
32 typedef struct s_xbt_parmap *xbt_parmap_t;
33
34 XBT_PUBLIC(xbt_parmap_t) xbt_parmap_new(unsigned int num_workers);
35 XBT_PUBLIC(void) xbt_parmap_destroy(xbt_parmap_t parmap);
36
37 XBT_PUBLIC(void) xbt_parmap_apply(xbt_parmap_t parmap,
38                                   void_f_pvoid_t fun,
39                                   xbt_dynar_t data);
40 XBT_PUBLIC(void*) xbt_parmap_next(xbt_parmap_t parmap);
41
42 /** \} */
43
44 SG_END_DECL()
45
46 #endif