From b5cfb55fb9e7333be3d7540164bc4c31e1059d9c Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Wed, 18 Jul 2018 20:46:28 +0200 Subject: [PATCH 1/1] thread_local is part of C++11, nowadays --- CMakeLists.txt | 14 +------------- include/xbt/base.h | 6 ------ src/simix/smx_context.cpp | 20 +------------------- tools/cmake/src/internal_config.h.in | 2 -- tools/cmake/test_prog/prog_thread_storage.c | 15 --------------- 5 files changed, 2 insertions(+), 55 deletions(-) delete mode 100644 tools/cmake/test_prog/prog_thread_storage.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 58a6cf9971..52169ca57f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -331,18 +331,6 @@ if(MINGW) set(HAVE_VASPRINTF 1) endif() -#Check if __thread is defined -execute_process( - COMMAND "${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_thread_storage.c -o testprog" - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - RESULT_VARIABLE HAVE_thread_storage_run) -file(REMOVE testprog) -if(HAVE_thread_storage_run) - set(HAVE_THREAD_LOCAL_STORAGE 1) -else() - set(HAVE_THREAD_LOCAL_STORAGE 0) -endif() - CHECK_INCLUDE_FILE("sys/sendfile.h" HAVE_SENDFILE_H) CHECK_FUNCTION_EXISTS(sendfile HAVE_SENDFILE) if(HAVE_SENDFILE_H AND HAVE_SENDFILE) @@ -356,7 +344,7 @@ if(enable_model-checking AND NOT "${CMAKE_SYSTEM}" MATCHES "Linux|FreeBSD") set(enable_model-checking FALSE) endif() -if(HAVE_MMAP AND HAVE_THREAD_LOCAL_STORAGE) +if(HAVE_MMAP) SET(HAVE_MMALLOC 1) else() SET(HAVE_MMALLOC 0) diff --git a/include/xbt/base.h b/include/xbt/base.h index ad48df7f9f..e9faa61a05 100644 --- a/include/xbt/base.h +++ b/include/xbt/base.h @@ -93,12 +93,6 @@ # endif #endif -#if defined(__GNUC__) -# define XBT_THREAD_LOCAL __thread -#else -# define XBT_THREAD_LOCAL No thread local on this architecture -#endif - /* * Expands to `one' if there is only one argument for the variadic part. * Otherwise, expands to `more'. diff --git a/src/simix/smx_context.cpp b/src/simix/smx_context.cpp index bd4a7e3a1e..4fb8c473ab 100644 --- a/src/simix/smx_context.cpp +++ b/src/simix/smx_context.cpp @@ -80,11 +80,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 +96,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")) { @@ -329,11 +319,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 +333,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; diff --git a/tools/cmake/src/internal_config.h.in b/tools/cmake/src/internal_config.h.in index 457aaf2633..8b25542733 100644 --- a/tools/cmake/src/internal_config.h.in +++ b/tools/cmake/src/internal_config.h.in @@ -47,8 +47,6 @@ #cmakedefine01 HAVE_PTHREAD /* Does not seems defined on Mac nor Windows */ #cmakedefine01 HAVE_PTHREAD_SETAFFINITY -/* If __thread is available */ -#cmakedefine01 HAVE_THREAD_LOCAL_STORAGE /* Variables for the raw contexts (to select the right assembly code) */ #cmakedefine01 SIMGRID_PROCESSOR_i686 diff --git a/tools/cmake/test_prog/prog_thread_storage.c b/tools/cmake/test_prog/prog_thread_storage.c deleted file mode 100644 index 1ed7fac9b4..0000000000 --- a/tools/cmake/test_prog/prog_thread_storage.c +++ /dev/null @@ -1,15 +0,0 @@ -/* Copyright (c) 2010-2018. The SimGrid Team. - * All rights reserved. */ - -/* 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 - -__thread int thread_specific_variable = 0; - -int main(void) { - thread_specific_variable++; - printf("%d\n", thread_specific_variable); - return 0; -} -- 2.20.1