diff options
Diffstat (limited to 'include/bh/internal/thread.h')
| -rw-r--r-- | include/bh/internal/thread.h | 45 |
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 */ |
