X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/15fbb723e6b55e15e57c04d798409b19a18df9aa..b0768dd1aa9363b429a117982079874d055e69e3:/include/simix/context.h diff --git a/include/simix/context.h b/include/simix/context.h index c4af0a8160..055fa3b81e 100644 --- a/include/simix/context.h +++ b/include/simix/context.h @@ -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 *************************************/ @@ -32,9 +33,10 @@ 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_swag_t processes); +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,16 +49,22 @@ 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 (*SIMIX_ctx_factory_initializer_t)(smx_context_factory_t*); -extern SIMIX_ctx_factory_initializer_t factory_initializer_to_use; +/* 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; -extern int _surf_parallel_contexts; -smx_context_t smx_current_context; +#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()