Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Alternative implementation or parmap with busy waits instead of futexes
[simgrid.git] / include / simix / context.h
index 712b07a..367acf2 100644 (file)
@@ -10,6 +10,7 @@
 #define _SIMIX_CONTEXT_H
 
 #include "xbt/swag.h"
+#include "xbt/parmap.h"
 #include "simix/datatypes.h"
 #include "simgrid_config.h"
 
@@ -33,10 +34,9 @@ typedef void (*smx_pfn_context_free_t) (smx_context_t);
 typedef void (*smx_pfn_context_start_t) (smx_context_t);
 typedef void (*smx_pfn_context_stop_t) (smx_context_t);
 typedef void (*smx_pfn_context_suspend_t) (smx_context_t context);
-typedef void (*smx_pfn_context_runall_t) (xbt_dynar_t processes);
+typedef void (*smx_pfn_context_runall_t) (void);
 typedef smx_context_t (*smx_pfn_context_self_t) (void);
 typedef void* (*smx_pfn_context_get_data_t) (smx_context_t context);
-typedef int (*smx_pfn_context_get_thread_id) (void);
 
 /* interface of the context factories */
 typedef struct s_smx_context_factory {
@@ -49,21 +49,14 @@ typedef struct s_smx_context_factory {
   smx_pfn_context_runall_t runall;
   smx_pfn_context_self_t self;
   smx_pfn_context_get_data_t get_data;
-  smx_pfn_context_get_thread_id get_thread_id;
 } s_smx_context_factory_t;
 
-
-
 /* Hack: let msg load directly the right factory */
 typedef void (*smx_ctx_factory_initializer_t)(smx_context_factory_t*);
 extern smx_ctx_factory_initializer_t smx_factory_initializer_to_use;
 extern char* smx_context_factory_name;
 extern int smx_context_stack_size;
 
-#if defined(CONTEXT_THREADS) && !defined(APPLE)
-#define HAVE_THREAD_LOCAL_STORAGE 1
-#endif
-
 #ifdef HAVE_THREAD_LOCAL_STORAGE
 extern __thread smx_context_t smx_current_context;
 #else
@@ -80,11 +73,11 @@ extern smx_context_t smx_current_context;
 typedef struct s_smx_context {
   s_xbt_swag_hookup_t hookup;
   xbt_main_func_t code;
-  int argc;
-  char **argv;
   void_pfn_smxprocess_t cleanup_func;
-  int iwannadie:1;
   void *data;   /* Here SIMIX stores the smx_process_t containing the context */
+  char **argv;
+  int argc;
+  int iwannadie:1;
 } s_smx_ctx_base_t;
 
 /* methods of this class */
@@ -101,14 +94,15 @@ void smx_ctx_base_free(smx_context_t context);
 void smx_ctx_base_stop(smx_context_t context);
 smx_context_t smx_ctx_base_self(void);
 void *smx_ctx_base_get_data(smx_context_t context);
-int smx_ctx_base_get_thread_id(void);
 
 /* parallelism */
-XBT_INLINE void SIMIX_context_set_nthreads(int nb_threads);
-XBT_INLINE int SIMIX_context_get_nthreads(void);
 XBT_INLINE int SIMIX_context_is_parallel(void);
-XBT_INLINE void SIMIX_context_set_parallel_threshold(int threshold);
+XBT_INLINE int SIMIX_context_get_nthreads(void);
+XBT_INLINE void SIMIX_context_set_nthreads(int nb_threads);
 XBT_INLINE int SIMIX_context_get_parallel_threshold(void);
+XBT_INLINE void SIMIX_context_set_parallel_threshold(int threshold);
+XBT_INLINE e_xbt_parmap_mode_t SIMIX_context_get_parallel_mode(void);
+XBT_INLINE void SIMIX_context_set_parallel_mode(e_xbt_parmap_mode_t mode);
 
 SG_END_DECL()