Go to the documentation of this file. 34 #define CTHR_MUTEX_TYPE HANDLE 35 #define CTHR_MUTEX_INIT NULL 36 #define CTHR_MUTEX_LOCK(x) do { if (x == NULL) { \ 37 HANDLE p = CreateMutex(NULL, FALSE, NULL); \ 38 if (InterlockedCompareExchangePointer((PVOID*)&x, (PVOID)p, NULL) != NULL) \ 40 } WaitForSingleObject(x, INFINITE); } while(0) 41 #define CTHR_MUTEX_UNLOCK(x) ReleaseMutex(x) 42 #define CTHR_THREAD_TYPE HANDLE 43 #define CTHR_THREAD_RTYPE void 44 #define CTHR_THREAD_RETURN return 45 #define CTHR_THREAD_CREATE(thr, func, arg) thr = (HANDLE)_beginthread(func, 0, arg) 46 #define CTHR_THREAD_JOIN(thr) WaitForSingleObject(thr, INFINITE) 49 #define CTHR_MUTEX_TYPE pthread_mutex_t 50 #define CTHR_MUTEX_INIT PTHREAD_MUTEX_INITIALIZER 51 #define CTHR_MUTEX_LOCK(x) pthread_mutex_lock(&x) 52 #define CTHR_MUTEX_UNLOCK(x) pthread_mutex_unlock(&x) 53 #define CTHR_THREAD_TYPE pthread_t 54 #define CTHR_THREAD_RTYPE void * 55 #define CTHR_THREAD_RETURN return NULL 56 #define CTHR_THREAD_CREATE(thr, func, arg) pthread_create(&thr, NULL, func, arg) 57 #define CTHR_THREAD_JOIN(thr) pthread_join(thr, NULL)