aboutsummaryrefslogtreecommitdiff
path: root/include/bh/internal/thread_win.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/bh/internal/thread_win.h')
-rw-r--r--include/bh/internal/thread_win.h24
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);