X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d747238ce054a5db96974c9b2c888f922505f93b..19a9b26d01348385d94fe24c9e452c5ec427ae20:/include/simix/context.h diff --git a/include/simix/context.h b/include/simix/context.h index 9d8ea2e8b6..9408c19125 100644 --- a/include/simix/context.h +++ b/include/simix/context.h @@ -10,8 +10,9 @@ #define _SIMIX_CONTEXT_H #include "xbt/swag.h" +#include "xbt/parmap.h" #include "simix/datatypes.h" -#include "gras_config.h" +#include "simgrid_config.h" SG_BEGIN_DECL() /******************************** Context *************************************/ @@ -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,18 +49,15 @@ 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; +XBT_PUBLIC(smx_ctx_factory_initializer_t) smx_factory_initializer_to_use; extern char* smx_context_factory_name; extern int smx_context_stack_size; -#ifdef CONTEXT_THREADS +#ifdef HAVE_THREAD_LOCAL_STORAGE extern __thread smx_context_t smx_current_context; #else extern smx_context_t smx_current_context; @@ -72,37 +69,44 @@ extern smx_context_t smx_current_context; /* the following function pointers types describe the interface that all context concepts must implement */ /* each context type derive from this structure, so they must contain this structure - * at their begining -- OOP in C :/ */ + * at their beginning -- OOP in C :/ */ 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 */ -void smx_ctx_base_factory_init(smx_context_factory_t *factory); -int smx_ctx_base_factory_finalize(smx_context_factory_t *factory); +XBT_PUBLIC(void) smx_ctx_base_factory_init(smx_context_factory_t *factory); +XBT_PUBLIC(int) smx_ctx_base_factory_finalize(smx_context_factory_t *factory); -smx_context_t +XBT_PUBLIC(smx_context_t) smx_ctx_base_factory_create_context_sized(size_t size, xbt_main_func_t code, int argc, char **argv, void_pfn_smxprocess_t cleanup, void* data); -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); +XBT_PUBLIC(void) smx_ctx_base_free(smx_context_t context); +XBT_PUBLIC(void) smx_ctx_base_stop(smx_context_t context); +XBT_PUBLIC(smx_context_t) smx_ctx_base_self(void); +XBT_PUBLIC(void) *smx_ctx_base_get_data(smx_context_t context); + +XBT_PUBLIC(xbt_dynar_t) SIMIX_process_get_runnable(void); +XBT_PUBLIC(smx_process_t) SIMIX_process_from_PID(int PID); +XBT_PUBLIC(xbt_dynar_t) SIMIX_processes_as_dynar(void); /* parallelism */ -void SIMIX_context_set_nthreads(int nb_threads); -int SIMIX_context_get_nthreads(void); -int SIMIX_context_is_parallel(void); +XBT_PUBLIC(int) SIMIX_context_is_parallel(void); +XBT_PUBLIC(int) SIMIX_context_get_nthreads(void); +XBT_PUBLIC(void) SIMIX_context_set_nthreads(int nb_threads); +XBT_PUBLIC(int) SIMIX_context_get_parallel_threshold(void); +XBT_PUBLIC(void) SIMIX_context_set_parallel_threshold(int threshold); +XBT_PUBLIC(e_xbt_parmap_mode_t) SIMIX_context_get_parallel_mode(void); +XBT_PUBLIC(void) SIMIX_context_set_parallel_mode(e_xbt_parmap_mode_t mode); SG_END_DECL()