3 #ifndef CDSLIB_THREADING_AUTO_DETECT_H
4 #define CDSLIB_THREADING_AUTO_DETECT_H
6 #if defined(CDS_THREADING_AUTODETECT)
7 // Auto-detect appropriate threading model
8 # if CDS_COMPILER == CDS_COMPILER_MSVC || (CDS_COMPILER == CDS_COMPILER_INTEL && CDS_OS_INTERFACE == CDS_OSI_WINDOWS)
9 // For MSVC, CDS_THREADING_MSVC and CDS_THREADING_WIN_TLS is supported.
10 // CDS_THREADING_MSVC must be explicitly defined if needed
11 # if !defined(CDS_THREADING_MSVC) && !defined(CDS_THREADING_WIN_TLS) && !defined(CDS_THREADING_CXX11)
12 # define CDS_THREADING_WIN_TLS
14 # elif CDS_COMPILER == CDS_COMPILER_GCC || CDS_COMPILER == CDS_COMPILER_CLANG || CDS_COMPILER == CDS_COMPILER_INTEL
15 // For GCC, CDS_THREADING_GCC and CDS_THREADING_PTHREAD is supported
16 // CDS_THREADING_GCC must be explicitly defined if needed
17 # if CDS_OS_INTERFACE == CDS_OSI_WINDOWS
18 # if !defined(CDS_THREADING_GCC) && !defined(CDS_THREADING_WIN_TLS) && !defined(CDS_THREADING_CXX11)
19 # define CDS_THREADING_WIN_TLS
21 # elif !defined(CDS_THREADING_GCC) && !defined(CDS_THREADING_PTHREAD) && !defined(CDS_THREADING_CXX11)
22 # define CDS_THREADING_PTHREAD
25 # error "Unknown compiler for cds::threading"
27 #endif // #if defined(CDS_THREADING_AUTODETECT)
31 #if defined(CDS_THREADING_MSVC)
32 # include <cds/threading/details/msvc.h>
33 #elif defined(CDS_THREADING_WIN_TLS)
34 # include <cds/threading/details/wintls.h>
35 #elif defined(CDS_THREADING_PTHREAD)
36 # include <cds/threading/details/pthread.h>
37 #elif defined(CDS_THREADING_GCC)
38 # include <cds/threading/details/gcc.h>
39 #elif defined(CDS_THREADING_CXX11)
40 # include <cds/threading/details/cxx11.h>
41 #elif !defined(CDS_THREADING_USER_DEFINED)
42 # error "You must define one of CDS_THREADING_xxx macro before compiling the application"
45 #endif // #ifndef CDSLIB_THREADING_AUTO_DETECT_H