X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/546debf4b5f37e488ae0b959e95b3058b5bba96a..0eb04ef20fbaf4f46bdb4389c4ff24c32b23b040:/src/simix/smx_context_thread.c diff --git a/src/simix/smx_context_thread.c b/src/simix/smx_context_thread.c index e1fdeccd66..ddd4deb48d 100644 --- a/src/simix/smx_context_thread.c +++ b/src/simix/smx_context_thread.c @@ -16,6 +16,8 @@ XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_context); +int smx_parallel_contexts = 0; + typedef struct s_smx_ctx_thread { s_smx_ctx_base_t super; /* Fields of super implementation */ xbt_os_thread_t thread; /* a plain dumb thread (portable to posix or windows) */ @@ -42,6 +44,7 @@ static void *smx_ctx_thread_wrapper(void *param); void SIMIX_ctx_thread_factory_init(smx_context_factory_t * factory) { smx_ctx_base_factory_init(factory); + VERB0("Activating thread context factory"); (*factory)->create_context = smx_ctx_thread_factory_create_context; /* Do not overload that method (*factory)->finalize */ @@ -49,7 +52,7 @@ void SIMIX_ctx_thread_factory_init(smx_context_factory_t * factory) (*factory)->stop = smx_ctx_thread_stop; (*factory)->suspend = smx_ctx_thread_suspend; - if(_surf_parallel_contexts) + if (smx_parallel_contexts) (*factory)->runall = smx_ctx_thread_runall_parallel; else (*factory)->runall = smx_ctx_thread_runall_serial; @@ -145,11 +148,13 @@ static void smx_ctx_thread_suspend(smx_context_t context) static void smx_ctx_thread_runall_serial(xbt_dynar_t processes) { smx_process_t process; - while (xbt_dynar_length(processes)){ - process = xbt_dynar_pop_as(processes,smx_process_t); + unsigned int cursor; + + xbt_dynar_foreach(processes, cursor, process) { xbt_os_sem_release(((smx_ctx_thread_t) process->context)->begin); xbt_os_sem_acquire(((smx_ctx_thread_t) process->context)->end); } + xbt_dynar_reset(processes); } static void smx_ctx_thread_runall_parallel(xbt_dynar_t processes) @@ -160,10 +165,10 @@ static void smx_ctx_thread_runall_parallel(xbt_dynar_t processes) xbt_dynar_foreach(processes, index, process) xbt_os_sem_release(((smx_ctx_thread_t) process->context)->begin); - while(xbt_dynar_length(processes)){ - process = xbt_dynar_pop_as(processes,smx_process_t); + xbt_dynar_foreach(processes, index, process) { xbt_os_sem_acquire(((smx_ctx_thread_t) process->context)->end); } + xbt_dynar_reset(processes); } static smx_context_t smx_ctx_thread_self(void)