Browse Source

Improve thread safety of pthreads builds that rely on C11 atomic operations for locking (#5170)

* Tighten memory orders for C11 atomic operations
tags/v0.3.30
Martin Kroeker GitHub 6 months ago
parent
commit
39eb43d441
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
1 changed files with 4 additions and 2 deletions
  1. +4
    -2
      driver/others/blas_server.c

+ 4
- 2
driver/others/blas_server.c View File

@@ -146,8 +146,8 @@ typedef struct {
} thread_status_t;

#ifdef HAVE_C11
#define atomic_load_queue(p) __atomic_load_n(p, __ATOMIC_RELAXED)
#define atomic_store_queue(p, v) __atomic_store_n(p, v, __ATOMIC_RELAXED)
#define atomic_load_queue(p) __atomic_load_n(p, __ATOMIC_ACQUIRE)
#define atomic_store_queue(p, v) __atomic_store_n(p, v, __ATOMIC_RELEASE)
#else
#define atomic_load_queue(p) (blas_queue_t*)(*(volatile blas_queue_t**)(p))
#define atomic_store_queue(p, v) (*(volatile blas_queue_t* volatile*)(p) = (v))
@@ -637,7 +637,9 @@ int exec_blas_async(BLASLONG pos, blas_queue_t *queue){

#ifdef SMP_SERVER
// Handle lazy re-init of the thread-pool after a POSIX fork
LOCK_COMMAND(&server_lock);
if (unlikely(blas_server_avail == 0)) blas_thread_init();
UNLOCK_COMMAND(&server_lock);
#endif
BLASLONG i = 0;
blas_queue_t *current = queue;


Loading…
Cancel
Save