aboutsummaryrefslogtreecommitdiff
path: root/include/bh/internal/thread.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/bh/internal/thread.h')
-rw-r--r--include/bh/internal/thread.h45
1 files changed, 45 insertions, 0 deletions
diff --git a/include/bh/internal/thread.h b/include/bh/internal/thread.h
new file mode 100644
index 0000000..fe2a9c8
--- /dev/null
+++ b/include/bh/internal/thread.h
@@ -0,0 +1,45 @@
+#ifndef BHLIB_INTERNAL_THREAD_H
+#define BHLIB_INTERNAL_THREAD_H
+
+#include <bh/thread.h>
+#include "queue.h"
+
+#define BH_THREAD_DONE (1 << 8)
+
+#if defined(BHLIB_USE_PTHREAD)
+#include "thread_posix.h"
+#elif defined(BHLIB_USE_WINTHREAD)
+#include "thread_win.h"
+#else
+#include "thread_null.h"
+#endif
+
+struct bh_task_s
+{
+ void (*func)(void *);
+ void *data;
+ int flags;
+};
+
+struct bh_thread_pool_s
+{
+ bh_thread_t *threads;
+ bh_queue_t tasks;
+ bh_mutex_t lock;
+ bh_cond_t new_task;
+ bh_cond_t done_task;
+ size_t size;
+ size_t active;
+ int shutdown;
+};
+
+void bh_task_init(bh_task_t *task,
+ void (*func)(void *),
+ void *data,
+ int flags);
+
+void bh_task_destroy(bh_task_t *task);
+
+void bh_thread_pool_worker(void *arg);
+
+#endif /* BHLIB_INTERNAL_THREAD_H */