Minor clean up of thread pool code

This commit is contained in:
gingerBill
2023-01-02 17:06:29 +00:00
parent c293f5b7eb
commit c386509112

View File

@@ -38,11 +38,11 @@ gb_internal void thread_pool_init(ThreadPool *pool, gbAllocator const &a, isize
thread_init_and_start(pool, t, i);
}
pool->running = true;
pool->running.store(true);
}
gb_internal void thread_pool_destroy(ThreadPool *pool) {
pool->running = false;
pool->running.store(false);
for_array_off(i, 1, pool->threads) {
Thread *t = &pool->threads[i];
@@ -139,12 +139,7 @@ gb_internal THREAD_PROC(thread_pool_thread_proc) {
current_thread = thread;
ThreadPool *pool = current_thread->pool;
for (;;) {
work_start:
if (!pool->running.load()) {
break;
}
while (pool->running.load()) {
// If we've got tasks to process, work through them
usize finished_tasks = 0;
while (thread_pool_queue_pop(current_thread, &task)) {
@@ -180,13 +175,15 @@ work_start:
futex_signal(&pool->tasks_left);
}
goto work_start;
goto main_loop_continue;
}
}
// if we've done all our work, and there's nothing to steal, go to sleep
i32 state = pool->tasks_available.load();
futex_wait(&pool->tasks_available, state);
main_loop_continue:;
}
return 0;