summaryrefslogtreecommitdiff
path: root/src/threadpool.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/threadpool.h')
-rw-r--r--src/threadpool.h34
1 files changed, 21 insertions, 13 deletions
diff --git a/src/threadpool.h b/src/threadpool.h
index 121d803..ae97583 100644
--- a/src/threadpool.h
+++ b/src/threadpool.h
@@ -10,23 +10,31 @@
typedef void (*tp_job_proc)(void *args);
typedef struct {
- u64 num_threads;
- pthread_t *threads;
+ u64 num_threads;
+ pthread_t * threads;
- sem_t threads_running;
- ts_deque_t jobs;
+ b32 is_running;
+
+pthread_mutex_t * count_mtx;
+ pthread_cond_t *done_signal;
+
+ u64 num_active;
+ u64 num_alive;
+
+ ts_deque_t jobs;
} thread_pool_t;
-// Job queue will be allocated on the arena.
-thread_pool_t tp_create(smrt_arena_t * arena ,
- u64 max_jobs ,
- u64 num_threads);
+// Thread pool will be allocated on the arena.
+thread_pool_t *tp_create(smrt_arena_t * arena ,
+ u64 max_jobs ,
+ u64 num_threads);
-i32 tp_destroy(thread_pool_t tp);
+// This function waits for threads to finish, frees relevant allocations, and then frees *tp.
+i32 tp_destroy(thread_pool_t *tp);
-i32 tp_push_job(thread_pool_t tp ,
- tp_job_proc job ,
- void *args);
+i32 tp_push_job(thread_pool_t * tp ,
+ tp_job_proc job ,
+ void *args);
// Wait for all threads to finish
-void tp_wait(thread_pool_t tp);
+void tp_wait(thread_pool_t *tp);