Pārlūkot izejas kodu

Merge pull request #1097 from nakst/master

Thread pool: create threads in thread_pool_wait
Jeroen van Rijn 4 gadi atpakaļ
vecāks
revīzija
7f34080b69
1 mainītis faili ar 6 papildinājumiem un 4 dzēšanām
  1. 6 4
      src/thread_pool.cpp

+ 6 - 4
src/thread_pool.cpp

@@ -13,6 +13,7 @@ struct ThreadPool {
 	std::atomic<isize> outstanding_task_count;
 	WorkerTask *volatile next_task;
 	BlockingMutex task_list_mutex;
+	isize thread_count;
 };
 
 void thread_pool_thread_entry(ThreadPool *pool) {
@@ -62,10 +63,7 @@ void thread_pool_init(ThreadPool *pool, gbAllocator const &a, isize thread_count
 	memset(pool, 0, sizeof(ThreadPool));
 	mutex_init(&pool->task_list_mutex);
 	pool->outstanding_task_count.store(1);
-
-	for (int i = 0; i < thread_count; i++) {
-		thread_pool_start_thread(pool);
-	}
+	pool->thread_count = thread_count;
 }
 
 void thread_pool_destroy(ThreadPool *pool) {
@@ -73,6 +71,10 @@ void thread_pool_destroy(ThreadPool *pool) {
 }
 
 void thread_pool_wait(ThreadPool *pool) {
+	for (int i = 0; i < pool->thread_count; i++) {
+		thread_pool_start_thread(pool);
+	}
+
 	pool->outstanding_task_count.fetch_sub(1);
 	thread_pool_thread_entry(pool);
 }