Quellcode durchsuchen

unlock worker's sched_mutex before busy waiting

Pierre-André Wacrenier vor 11 Jahren
Ursprung
Commit
9c421fc50e
1 geänderte Dateien mit 4 neuen und 2 gelöschten Zeilen
  1. 4 2
      src/drivers/driver_common/driver_common.c

+ 4 - 2
src/drivers/driver_common/driver_common.c

@@ -219,9 +219,13 @@ struct starpu_task *_starpu_get_worker_task(struct _starpu_worker *args, int wor
 		_starpu_worker_set_status_sleeping(workerid);
 
 		if (_starpu_worker_can_block(memnode))
+		{
 			STARPU_PTHREAD_COND_WAIT(&args->sched_cond, &args->sched_mutex);
+			STARPU_PTHREAD_MUTEX_UNLOCK(&args->sched_mutex);
+		}
 		else
 		{
+			STARPU_PTHREAD_MUTEX_UNLOCK(&args->sched_mutex);			
 			if (_starpu_machine_is_running())
 			{
 				_starpu_exponential_backoff(args);
@@ -237,8 +241,6 @@ struct starpu_task *_starpu_get_worker_task(struct _starpu_worker *args, int wor
 			}
 		}
 
-		STARPU_PTHREAD_MUTEX_UNLOCK(&args->sched_mutex);
-
 #ifdef STARPU_USE_SC_HYPERVISOR
 		struct _starpu_sched_ctx *sched_ctx = NULL;
 		struct starpu_sched_ctx_performance_counters *perf_counters = NULL;