From 6092308324e3c1fd1d3f59f0d14a63442862aa55 Mon Sep 17 00:00:00 2001 From: jsteube Date: Thu, 16 Aug 2018 14:57:10 +0200 Subject: [PATCH] Add sempaphore macros for later use Switch from CriticalSection to regular Mutex on windows --- include/thread.h | 21 ++++++++++++++++++++- include/types.h | 11 +++++++---- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/include/thread.h b/include/thread.h index 863f00e44..d9e594a06 100644 --- a/include/thread.h +++ b/include/thread.h @@ -20,23 +20,42 @@ #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 (u32 i = 0; i < n; i++) WaitForSingleObject ((a)[i], INFINITE) #define hc_thread_exit(t) ExitThread (t) +#define hc_thread_detach(t) CloseHandle (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) +*/ + +#define hc_thread_mutex_init(m) m = CreateMutex (NULL, FALSE, NULL) +#define hc_thread_mutex_lock(m) WaitForSingleObject (m, INFINITE) +#define hc_thread_mutex_unlock(m) ReleaseMutex (m) +#define hc_thread_mutex_delete(m) CloseHandle (m) + +#define hc_thread_sem_init(s) s = CreateSemaphore (NULL, 0, INT_MAX, NULL) +#define hc_thread_sem_post(s) ReleaseSemaphore (s, 1, NULL) +#define hc_thread_sem_wait(s) WaitForSingleObject (s, INFINITE) +#define hc_thread_sem_close(s) CloseHandle (s) #else #define hc_thread_create(t,f,a) pthread_create (&t, NULL, f, a) #define hc_thread_wait(n,a) for (u32 i = 0; i < n; i++) pthread_join ((a)[i], NULL) #define hc_thread_exit(t) pthread_exit (&t) +#define hc_thread_detach(t) pthread_detach (t) +#define hc_thread_mutex_init(m) pthread_mutex_init (&m, NULL) #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) +#define hc_thread_sem_init(s) sem_init (&s, 0, 0) +#define hc_thread_sem_post(s) sem_post (&s) +#define hc_thread_sem_wait(s) sem_wait (&s) +#define hc_thread_sem_close(s) sem_close (&s) + #endif /* diff --git a/include/types.h b/include/types.h index 4e01486b9..a2034ed71 100644 --- a/include/types.h +++ b/include/types.h @@ -57,14 +57,17 @@ typedef struct timespec hc_timer_t; #if defined (_POSIX) #include +#include #endif #if defined (_WIN) -typedef HANDLE hc_thread_t; -typedef CRITICAL_SECTION hc_thread_mutex_t; +typedef HANDLE hc_thread_t; +typedef HANDLE hc_thread_mutex_t; +typedef HANDLE hc_thread_semaphore_t; #else -typedef pthread_t hc_thread_t; -typedef pthread_mutex_t hc_thread_mutex_t; +typedef pthread_t hc_thread_t; +typedef pthread_mutex_t hc_thread_mutex_t; +typedef sem_t hc_thread_semaphore_t; #endif // enums