Browse Source

Fix thread data races

tags/v0.3.0
Martin Kroeker GitHub 8 years ago
parent
commit
f460776f0f
1 changed files with 8 additions and 6 deletions
  1. +8
    -6
      driver/others/blas_server.c

+ 8
- 6
driver/others/blas_server.c View File

@@ -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…
Cancel
Save