From ac6cc5191aed17bdedbe4162d250359616c34286 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 19 Aug 2021 17:43:15 +0100 Subject: [PATCH] Make `ThreadPool.is_running` atomic --- src/thread_pool.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/thread_pool.cpp b/src/thread_pool.cpp index 738ef19b6..b375d410a 100644 --- a/src/thread_pool.cpp +++ b/src/thread_pool.cpp @@ -11,10 +11,10 @@ struct WorkerTask { struct ThreadPool { - BlockingMutex mutex; - Semaphore sem_available; - std::atomic processing_work_count; - bool is_running; + BlockingMutex mutex; + Semaphore sem_available; + std::atomic processing_work_count; + std::atomic is_running; gbAllocator allocator; @@ -74,7 +74,7 @@ void thread_pool_start(ThreadPool *pool) { } void thread_pool_join(ThreadPool *pool) { - pool->is_running = false; + pool->is_running.store(false); semaphore_post(&pool->sem_available, cast(i32)pool->thread_count); @@ -153,7 +153,7 @@ void thread_pool_wait_to_process(ThreadPool *pool) { THREAD_PROC(worker_thread_internal) { ThreadPool *pool = cast(ThreadPool *)thread->user_data; - while (pool->is_running) { + while (pool->is_running.load()) { semaphore_wait(&pool->sem_available); WorkerTask task = {};