Fix thread data races
This commit is contained in:
parent
e882f3d6f3
commit
f460776f0f
|
@ -669,9 +669,15 @@ int exec_blas_async(BLASLONG pos, blas_queue_t *queue){
|
||||||
} while (1);
|
} while (1);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
while(thread_status[i].queue) {
|
pthread_mutex_lock (&thread_status[i].lock);
|
||||||
|
tsiq = thread_status[i].queue;
|
||||||
|
pthread_mutex_unlock (&thread_status[i].lock);
|
||||||
|
while(tsiq) {
|
||||||
i ++;
|
i ++;
|
||||||
if (i >= blas_num_threads - 1) i = 0;
|
if (i >= blas_num_threads - 1) i = 0;
|
||||||
|
pthread_mutex_lock (&thread_status[i].lock);
|
||||||
|
tsiq = thread_status[i].queue;
|
||||||
|
pthread_mutex_unlock (&thread_status[i].lock);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
@ -960,14 +966,10 @@ int BLASFUNC(blas_thread_shutdown)(void){
|
||||||
|
|
||||||
for (i = 0; i < blas_num_threads - 1; i++) {
|
for (i = 0; i < blas_num_threads - 1; i++) {
|
||||||
|
|
||||||
blas_lock(&exec_queue_lock);
|
pthread_mutex_lock (&thread_status[i].lock);
|
||||||
|
|
||||||
thread_status[i].queue = (blas_queue_t *)-1;
|
thread_status[i].queue = (blas_queue_t *)-1;
|
||||||
|
|
||||||
blas_unlock(&exec_queue_lock);
|
|
||||||
|
|
||||||
pthread_mutex_lock (&thread_status[i].lock);
|
|
||||||
|
|
||||||
thread_status[i].status = THREAD_STATUS_WAKEUP;
|
thread_status[i].status = THREAD_STATUS_WAKEUP;
|
||||||
|
|
||||||
pthread_cond_signal (&thread_status[i].wakeup);
|
pthread_cond_signal (&thread_status[i].wakeup);
|
||||||
|
|
Loading…
Reference in New Issue