Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Define CONTEXT_THREADS in simgrid_config.h.
[simgrid.git] / include / simix / context.h
index 0ccf120..055fa3b 100644 (file)
@@ -6,11 +6,12 @@
 /* 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_CONTEXT_H
-#define _XBT_CONTEXT_H
+#ifndef _SIMIX_CONTEXT_H
+#define _SIMIX_CONTEXT_H
 
 #include "xbt/swag.h"
 #include "simix/datatypes.h"
+#include "simgrid_config.h"
 
 SG_BEGIN_DECL()
 /******************************** Context *************************************/
@@ -35,6 +36,7 @@ typedef void (*smx_pfn_context_suspend_t) (smx_context_t context);
 typedef void (*smx_pfn_context_runall_t) (xbt_dynar_t processes);
 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 {
@@ -47,6 +49,7 @@ 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;
 
 
@@ -55,8 +58,13 @@ typedef struct s_smx_context_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_parallel_contexts;
+extern int smx_context_stack_size;
+
+#ifdef CONTEXT_THREADS
+extern __thread smx_context_t smx_current_context;
+#else
 extern smx_context_t smx_current_context;
+#endif
 
 /* *********************** */
 /* Context type definition */
@@ -89,6 +97,14 @@ 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_parallel_threshold(void);
 
 SG_END_DECL()