22 #ifndef LOG4CPLUS_HELPERS_THREAD_CONFIG_HEADER_ 23 #define LOG4CPLUS_HELPERS_THREAD_CONFIG_HEADER_ 25 #define INCLUDE_CSTDDEF 26 #include "dcmtk/ofstd/ofstdinc.h" 28 #ifdef LOG4CPLUS_USE_PTHREADS 30 # include <semaphore.h> 31 # define LOG4CPLUS_MUTEX_PTR_DECLARE pthread_mutex_t* 32 # define LOG4CPLUS_MUTEX_CREATE ::log4cplus::thread::createNewMutex() 33 # define LOG4CPLUS_MUTEX_LOCK(mutex) pthread_mutex_lock(mutex) 34 # define LOG4CPLUS_MUTEX_UNLOCK(mutex) pthread_mutex_unlock(mutex) 35 # define LOG4CPLUS_MUTEX_FREE(mutex) ::log4cplus::thread::deleteMutex(mutex) 36 # define LOG4CPLUS_THREAD_HANDLE_TYPE pthread_t 37 # define LOG4CPLUS_THREAD_KEY_TYPE pthread_t 38 # define LOG4CPLUS_GET_CURRENT_THREAD_NAME \ 39 ::log4cplus::thread::getCurrentThreadName() 40 # define LOG4CPLUS_GET_CURRENT_THREAD pthread_self() 41 # define LOG4CPLUS_THREAD_LOCAL_TYPE pthread_key_t* 42 # define LOG4CPLUS_THREAD_LOCAL_INIT(cleanup) \ 43 ::log4cplus::thread::createPthreadKey(cleanup) 44 # define LOG4CPLUS_GET_THREAD_LOCAL_VALUE(key) pthread_getspecific(*(key)) 45 # define LOG4CPLUS_SET_THREAD_LOCAL_VALUE(key, value) \ 46 pthread_setspecific(*(key), value) 47 # define LOG4CPLUS_THREAD_LOCAL_CLEANUP(key) \ 48 do { pthread_key_t * pthkey (key); pthread_key_delete(*pthkey); \ 49 delete pthkey; } while(0) 52 LOG4CPLUS_EXPORT LOG4CPLUS_MUTEX_PTR_DECLARE createNewMutex();
53 LOG4CPLUS_EXPORT
void deleteMutex(LOG4CPLUS_MUTEX_PTR_DECLARE);
54 LOG4CPLUS_EXPORT LOG4CPLUS_THREAD_LOCAL_TYPE createPthreadKey(
void (*) (
void *));
58 #elif defined(LOG4CPLUS_USE_WIN32_THREADS) 59 # undef WIN32_LEAN_AND_MEAN 60 # define WIN32_LEAN_AND_MEAN 63 # define LOG4CPLUS_MUTEX_PTR_DECLARE CRITICAL_SECTION* 64 # define LOG4CPLUS_MUTEX_CREATE ::log4cplus::thread::createNewMutex() 65 # define LOG4CPLUS_MUTEX_LOCK(mutex) EnterCriticalSection(mutex) 66 # define LOG4CPLUS_MUTEX_UNLOCK(mutex) LeaveCriticalSection(mutex) 67 # define LOG4CPLUS_MUTEX_FREE(mutex) ::log4cplus::thread::deleteMutex(mutex) 69 # define LOG4CPLUS_THREAD_HANDLE_TYPE HANDLE 70 # define LOG4CPLUS_THREAD_KEY_TYPE DWORD 71 # define LOG4CPLUS_GET_CURRENT_THREAD GetCurrentThreadId() 72 # define LOG4CPLUS_GET_CURRENT_THREAD_NAME \ 73 ::log4cplus::thread::getCurrentThreadName() 74 # define LOG4CPLUS_THREAD_LOCAL_TYPE DWORD 75 # define LOG4CPLUS_THREAD_LOCAL_INIT(cleanup) TlsAlloc() 76 # define LOG4CPLUS_GET_THREAD_LOCAL_VALUE(key) TlsGetValue(key) 77 # define LOG4CPLUS_SET_THREAD_LOCAL_VALUE(key, value) \ 78 TlsSetValue(key, OFstatic_cast(LPVOID, value)) 79 # define LOG4CPLUS_THREAD_LOCAL_CLEANUP(key) TlsFree(key) 80 # if defined (_MSC_VER) 81 # undef LOG4CPLUS_HAVE_TLS_SUPPORT 82 # undef LOG4CPLUS_THREAD_LOCAL_VAR 87 # define LOG4CPLUS_HAVE_TLS_SUPPORT 1 88 # define LOG4CPLUS_THREAD_LOCAL_VAR __declspec(thread) 94 LOG4CPLUS_EXPORT LOG4CPLUS_MUTEX_PTR_DECLARE createNewMutex();
95 LOG4CPLUS_EXPORT
void deleteMutex(LOG4CPLUS_MUTEX_PTR_DECLARE);
99 #elif defined(LOG4CPLUS_SINGLE_THREADED) 100 # define LOG4CPLUS_MUTEX_PTR_DECLARE int* 101 # define LOG4CPLUS_MUTEX_CREATE NULL 102 # define LOG4CPLUS_MUTEX_LOCK(mutex) 103 # define LOG4CPLUS_MUTEX_UNLOCK(mutex) 104 # define LOG4CPLUS_MUTEX_FREE(mutex) 105 # define LOG4CPLUS_THREAD_HANDLE_TYPE void * 106 # define LOG4CPLUS_THREAD_KEY_TYPE int 107 # define LOG4CPLUS_GET_CURRENT_THREAD 1 108 # define LOG4CPLUS_GET_CURRENT_THREAD_NAME \ 109 LOG4CPLUS_C_STR_TO_TSTRING("single") 110 # define LOG4CPLUS_THREAD_LOCAL_TYPE void* 111 # define LOG4CPLUS_THREAD_LOCAL_INIT(cleanup) NULL 112 # define LOG4CPLUS_GET_THREAD_LOCAL_VALUE(key) (key) 113 # define LOG4CPLUS_SET_THREAD_LOCAL_VALUE(key, value) \ 114 do { (key) = (value); } while (0) 115 # define LOG4CPLUS_THREAD_LOCAL_CLEANUP(key) do { (key) = NULL; } while (0) 116 # undef LOG4CPLUS_HAVE_TLS_SUPPORT 117 # undef LOG4CPLUS_THREAD_LOCAL_VAR 120 # error "You Must define a Threading model" 134 #ifndef LOG4CPLUS_SINGLE_THREADED 135 # define LOG4CPLUS_BEGIN_SYNCHRONIZE_ON_MUTEX(mutex) \ 136 do { ::log4cplus::thread::Guard _sync_guard_object(mutex); 138 # define LOG4CPLUS_BEGIN_SYNCHRONIZE_ON_MUTEX(mutex) do { (void)(mutex); 141 #define LOG4CPLUS_END_SYNCHRONIZE_ON_MUTEX } while (0) 144 #endif // LOG4CPLUS_HELPERS_THREAD_CONFIG_HEADER_