diff options
Diffstat (limited to 'include/bh/internal/thread_win.h')
| -rw-r--r-- | include/bh/internal/thread_win.h | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/include/bh/internal/thread_win.h b/include/bh/internal/thread_win.h index e2108bc..57150f0 100644 --- a/include/bh/internal/thread_win.h +++ b/include/bh/internal/thread_win.h @@ -7,7 +7,7 @@ struct bh_thread_s int allocated; }; -struct bh_thread_data_s +typedef struct bh_thread_data_s { bh_task_t *task; bh_thread_end_cb_t end; @@ -18,14 +18,26 @@ struct bh_mutex_s CRITICAL_SECTION handle; }; +struct bh_semaphore_s +{ + HANDLE handle; +}; + +#if WINVER >= _WIN32_WINNT_VISTA struct bh_cond_s { - CRITICAL_SECTION lock; - HANDLE wait; - HANDLE done; + CONDITION_VARIABLE handle; +}; +#else +struct bh_cond_s +{ + bh_mutex_t lock; + bh_semaphore_t wait; + bh_semaphore_t done; int waiting; int signals; }; +#endif int bh_thread_init_base(bh_thread_t *thread, bh_task_t *task, @@ -38,6 +50,10 @@ int bh_thread_init_base(bh_thread_t *thread, int bh_mutex_init(bh_mutex_t *mutex); void bh_mutex_destroy(bh_mutex_t *mutex); +int bh_semaphore_init(bh_semaphore_t *semaphore, + int count); +void bh_semaphore_destroy(bh_semaphore_t *semaphore); + int bh_cond_init(bh_cond_t *cond); void bh_cond_destroy(bh_cond_t *cond); |
