diff options
Diffstat (limited to 'src/threadpool.c')
| -rw-r--r-- | src/threadpool.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/threadpool.c b/src/threadpool.c index a860cf7..68b34d6 100644 --- a/src/threadpool.c +++ b/src/threadpool.c @@ -1,11 +1,9 @@ #include "common.h" #include "threadpool.h" -#include "log.h" #include "smrt_arena.h" #include "deque.h" #include <bits/pthreadtypes.h> -#include <iso646.h> #include <pthread.h> #include <stdatomic.h> #include <string.h> @@ -65,14 +63,8 @@ thread_pool_t *tp_create(smrt_arena_t *arena, u64 max_jobs, u64 num_threads) { ts_deque_t tsq = ts_deque_create(arena, q); pthread_t *threads = SMRTA_ALLOC_ARRAY(arena, pthread_t, num_threads); + // I just leak this into the arena worker_args * args = SMRTA_ALLOC_ARRAY(arena, worker_args, num_threads); - for (u64 i = 0; i < num_threads; i++) { - args[i] = (worker_args){ - .id = i, - .tp = tp, - }; - pthread_create(&threads[i], NULL, worker_proc, (void*)&args[i]); - } pthread_mutex_t *count_mtx = smrt_arena_push(arena, sizeof(pthread_cond_t), true); pthread_mutex_init(count_mtx, NULL); @@ -92,6 +84,16 @@ thread_pool_t *tp_create(smrt_arena_t *arena, u64 max_jobs, u64 num_threads) { .num_active=0, }; + for (u64 i = 0; i < num_threads; i++) { + args[i] = (worker_args){ + .id = i, + .tp = tp, + }; + pthread_create(&threads[i], NULL, worker_proc, (void*)&args[i]); + } + + while (tp->num_alive != num_threads) {} + return tp; } |