X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d8eb62b207b566949a0d9ce649a7b21e226b9168..e57b23fdfca6b2e76a216440aa2b33576818bc98:/src/simix/smx_context.cpp diff --git a/src/simix/smx_context.cpp b/src/simix/smx_context.cpp index bd4a7e3a1e..6f32bb18b6 100644 --- a/src/simix/smx_context.cpp +++ b/src/simix/smx_context.cpp @@ -5,23 +5,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. */ -#include -#include - -#include -#include - -#include -#include -#include -#include - #include "simgrid/modelchecker.h" -#include "simgrid/sg_config.hpp" -#include "smx_private.hpp" #include "src/internal_config.h" -#include "xbt/log.h" -#include "xbt/xbt_os_thread.h" +#include "src/simix/smx_private.hpp" +#include "xbt/config.hpp" + +#include #ifdef _WIN32 #include @@ -80,11 +69,7 @@ unsigned smx_context_stack_size; int smx_context_stack_size_was_set = 0; unsigned smx_context_guard_size; int smx_context_guard_size_was_set = 0; -#if HAVE_THREAD_LOCAL_STORAGE -static XBT_THREAD_LOCAL smx_context_t smx_current_context_parallel; -#else -static xbt_os_thread_key_t smx_current_context_key = 0; -#endif +static thread_local smx_context_t smx_current_context_parallel; static smx_context_t smx_current_context_serial; static int smx_parallel_contexts = 1; static int smx_parallel_threshold = 2; @@ -100,12 +85,6 @@ void SIMIX_context_mod_init() smx_context_stack_size_was_set = not simgrid::config::is_default("contexts/stack-size"); smx_context_guard_size_was_set = not simgrid::config::is_default("contexts/guard-size"); -#if HAVE_THREAD_CONTEXTS && not HAVE_THREAD_LOCAL_STORAGE - /* the __thread storage class is not available on this platform: - * use getspecific/setspecific instead to store the current context in each thread */ - xbt_os_thread_key_create(&smx_current_context_key); -#endif - #if HAVE_SMPI && (defined(__APPLE__) || defined(__NetBSD__)) std::string priv = simgrid::config::get_value("smpi/privatization"); if (context_factory_name == "thread" && (priv == "dlopen" || priv == "yes" || priv == "default" || priv == "1")) { @@ -122,7 +101,7 @@ void SIMIX_context_mod_init() #endif /* select the context factory to use to create the contexts */ - if (simgrid::kernel::context::factory_initializer) { // Give Java a chance to hijack the factory mechanism + if (simgrid::kernel::context::factory_initializer != nullptr) { // Give Java a chance to hijack the factory mechanism simix_global->context_factory = simgrid::kernel::context::factory_initializer(); return; } @@ -269,8 +248,8 @@ int SIMIX_context_get_nthreads() { */ void SIMIX_context_set_nthreads(int nb_threads) { if (nb_threads<=0) { - nb_threads = xbt_os_get_numcores(); - XBT_INFO("Auto-setting contexts/nthreads to %d",nb_threads); + nb_threads = std::thread::hardware_concurrency(); + XBT_INFO("Auto-setting contexts/nthreads to %d", nb_threads); } #if !HAVE_THREAD_CONTEXTS xbt_assert(nb_threads == 1, "Parallel runs are impossible when the pthreads are missing."); @@ -329,11 +308,7 @@ void SIMIX_context_set_parallel_mode(e_xbt_parmap_mode_t mode) { smx_context_t SIMIX_context_get_current() { if (SIMIX_context_is_parallel()) { -#if HAVE_THREAD_LOCAL_STORAGE return smx_current_context_parallel; -#else - return xbt_os_thread_get_specific(smx_current_context_key); -#endif } else { return smx_current_context_serial; @@ -347,11 +322,7 @@ smx_context_t SIMIX_context_get_current() void SIMIX_context_set_current(smx_context_t context) { if (SIMIX_context_is_parallel()) { -#if HAVE_THREAD_LOCAL_STORAGE smx_current_context_parallel = context; -#else - xbt_os_thread_set_specific(smx_current_context_key, context); -#endif } else { smx_current_context_serial = context;