[Bf-blender-cvs] [a1d8fe0] master: Task scheduler: Avoid mutex lock in number manipulation functions

Sergey Sharybin noreply at git.blender.org
Tue May 10 15:00:42 CEST 2016


Commit: a1d8fe052ccd8945f14be5a50bd5af581b89c643
Author: Sergey Sharybin
Date:   Tue May 10 14:59:19 2016 +0200
Branches: master
https://developer.blender.org/rBa1d8fe052ccd8945f14be5a50bd5af581b89c643

Task scheduler: Avoid mutex lock in number manipulation functions

It seems using atomic operations here we can avoid having mute without
breaking anything.

Thanks Bastien for double-checking the changes!

===================================================================

M	source/blender/blenlib/intern/task.c

===================================================================

diff --git a/source/blender/blenlib/intern/task.c b/source/blender/blenlib/intern/task.c
index b47931c..a62ba73 100644
--- a/source/blender/blenlib/intern/task.c
+++ b/source/blender/blenlib/intern/task.c
@@ -230,28 +230,21 @@ static void task_free(TaskPool *pool, Task *task, const int thread_id)
 
 static void task_pool_num_decrease(TaskPool *pool, size_t done)
 {
-	BLI_mutex_lock(&pool->num_mutex);
-
 	BLI_assert(pool->num >= done);
 
-	pool->num -= done;
+	atomic_sub_z((size_t*)&pool->num, done);
 	atomic_sub_z(&pool->currently_running_tasks, done);
-	pool->done += done;
+	atomic_add_z((size_t*)&pool->done, done);
 
-	if (pool->num == 0)
+	if (pool->num == 0) {
 		BLI_condition_notify_all(&pool->num_cond);
-
-	BLI_mutex_unlock(&pool->num_mutex);
+	}
 }
 
 static void task_pool_num_increase(TaskPool *pool)
 {
-	BLI_mutex_lock(&pool->num_mutex);
-
-	pool->num++;
+	atomic_add_z((size_t*)&pool->num, 1);
 	BLI_condition_notify_all(&pool->num_cond);
-
-	BLI_mutex_unlock(&pool->num_mutex);
 }
 
 static bool task_scheduler_thread_wait_pop(TaskScheduler *scheduler, Task **task)




More information about the Bf-blender-cvs mailing list