diff options
-rw-r--r-- | common/thread_calls.c | 68 | ||||
-rw-r--r-- | common/thread_calls.h | 16 |
2 files changed, 76 insertions, 8 deletions
diff --git a/common/thread_calls.c b/common/thread_calls.c index 62bc2be4..efdf1da3 100644 --- a/common/thread_calls.c +++ b/common/thread_calls.c @@ -24,6 +24,7 @@ #include <windows.h> #else #include <pthread.h> +#include <semaphore.h> #endif #include "arch.h" #include "thread_calls.h" @@ -72,7 +73,7 @@ tc_get_threadid(void) /*****************************************************************************/ long APP_CC -tc_create_mutex(void) +tc_mutex_create(void) { #if defined(_WIN32) return (long)CreateMutex(0, 0, 0); @@ -87,7 +88,7 @@ tc_create_mutex(void) /*****************************************************************************/ void APP_CC -tc_delete_mutex(long mutex) +tc_mutex_delete(long mutex) { #if defined(_WIN32) CloseHandle((HANDLE)mutex); @@ -102,7 +103,7 @@ tc_delete_mutex(long mutex) /*****************************************************************************/ int APP_CC -tc_lock_mutex(long mutex) +tc_mutex_lock(long mutex) { #if defined(_WIN32) WaitForSingleObject((HANDLE)mutex, INFINITE); @@ -115,7 +116,7 @@ tc_lock_mutex(long mutex) /*****************************************************************************/ int APP_CC -tc_unlock_mutex(long mutex) +tc_mutex_unlock(long mutex) { #if defined(_WIN32) ReleaseMutex((HANDLE)mutex); @@ -125,3 +126,62 @@ tc_unlock_mutex(long mutex) return 0; #endif } + +/*****************************************************************************/ +long APP_CC +tc_sem_create(int init_count) +{ +#if defined(_WIN32) + HANDLE sem; + + sem = CreateSemaphore(0, init_count, init_count + 10, 0); + return (long)sem; +#else + sem_t* sem; + + sem = g_malloc(sizeof(sem_t), 0); + sem_init(sem, 0, init_count); + return (long)sem; +#endif +} + +/*****************************************************************************/ +void APP_CC +tc_sem_delete(long sem) +{ +#if defined(_WIN32) + CloseHandle((HANDLE)sem); +#else + sem_t* lsem; + + lsem = (sem_t*)sem; + sem_destroy(lsem); + g_free(lsem); +#endif +} + +/*****************************************************************************/ +int APP_CC +tc_sem_dec(long sem) +{ +#if defined(_WIN32) + WaitForSingleObject((HANDLE)sem, INFINITE); + return 0; +#else + sem_wait((sem_t*)sem); + return 0; +#endif +} + +/*****************************************************************************/ +int APP_CC +tc_sem_inc(long sem) +{ +#if defined(_WIN32) + ReleaseSemaphore((HANDLE)sem, 1, 0); + return 0; +#else + sem_post((sem_t*)sem); + return 0; +#endif +} diff --git a/common/thread_calls.h b/common/thread_calls.h index e1697d36..e7e64b20 100644 --- a/common/thread_calls.h +++ b/common/thread_calls.h @@ -28,12 +28,20 @@ tc_thread_create(THREAD_RV (THREAD_CC * start_routine)(void*), void* arg); long APP_CC tc_get_threadid(void); long APP_CC -tc_create_mutex(void); +tc_mutex_create(void); void APP_CC -tc_delete_mutex(long mutex); +tc_mutex_delete(long mutex); int APP_CC -tc_lock_mutex(long mutex); +tc_mutex_lock(long mutex); int APP_CC -tc_unlock_mutex(long mutex); +tc_mutex_unlock(long mutex); +long APP_CC +tc_sem_create(int init_count); +void APP_CC +tc_sem_delete(long sem); +int APP_CC +tc_sem_dec(long sem); +int APP_CC +tc_sem_inc(long sem); #endif |