/** * Authors.....: Jens Steube * License.....: MIT */ #ifndef _THREAD_H #define _THREAD_H #if defined (_POSIX) #include #include #endif // _POSIX #if defined (_WIN) #include #endif // _WIN #if defined (_WIN) typedef HANDLE hc_thread_t; typedef CRITICAL_SECTION hc_thread_mutex_t; #elif defined (_POSIX) typedef pthread_t hc_thread_t; typedef pthread_mutex_t hc_thread_mutex_t; #endif #if defined (_WIN) #define hc_thread_create(t,f,a) t = CreateThread (NULL, 0, (LPTHREAD_START_ROUTINE) &f, a, 0, NULL) #define hc_thread_wait(n,a) for (uint i = 0; i < n; i++) WaitForSingleObject ((a)[i], INFINITE) #define hc_thread_exit(t) ExitThread (t) #define hc_thread_mutex_lock(m) EnterCriticalSection (&m) #define hc_thread_mutex_unlock(m) LeaveCriticalSection (&m) #define hc_thread_mutex_init(m) InitializeCriticalSection (&m) #define hc_thread_mutex_delete(m) DeleteCriticalSection (&m) #elif defined (_POSIX) #define hc_thread_create(t,f,a) pthread_create (&t, NULL, f, a) #define hc_thread_wait(n,a) for (uint i = 0; i < n; i++) pthread_join ((a)[i], NULL) #define hc_thread_exit(t) pthread_exit (&t) #define hc_thread_mutex_lock(m) pthread_mutex_lock (&m) #define hc_thread_mutex_unlock(m) pthread_mutex_unlock (&m) #define hc_thread_mutex_init(m) pthread_mutex_init (&m, NULL) #define hc_thread_mutex_delete(m) pthread_mutex_destroy (&m) #endif #endif // _THREAD_H