21 #ifndef OPAL_MUTEX_UNIX_H
22 #define OPAL_MUTEX_UNIX_H 1
35 #include "opal_config.h"
37 #if OPAL_HAVE_POSIX_THREADS
43 #elif OPAL_HAVE_SOLARIS_THREADS
56 #if OPAL_HAVE_POSIX_THREADS
57 pthread_mutex_t m_lock_pthread;
58 #elif OPAL_HAVE_SOLARIS_THREADS
59 mutex_t m_lock_solaris;
62 #if !OPAL_ENABLE_MULTI_THREADS && OPAL_ENABLE_DEBUG
64 const char *m_lock_file;
78 #if OPAL_HAVE_POSIX_THREADS
87 int ret = pthread_mutex_trylock(&m->m_lock_pthread);
90 perror(
"opal_mutex_trylock()");
95 return pthread_mutex_trylock(&m->m_lock_pthread);
101 #if OPAL_ENABLE_DEBUG
102 int ret = pthread_mutex_lock(&m->m_lock_pthread);
103 if (ret == EDEADLK) {
105 perror(
"opal_mutex_lock()");
109 pthread_mutex_lock(&m->m_lock_pthread);
115 #if OPAL_ENABLE_DEBUG
116 int ret = pthread_mutex_unlock(&m->m_lock_pthread);
119 perror(
"opal_mutex_unlock");
123 pthread_mutex_unlock(&m->m_lock_pthread);
127 #elif OPAL_HAVE_SOLARIS_THREADS
136 return mutex_trylock(&m->m_lock_solaris);
141 mutex_lock(&m->m_lock_solaris);
146 mutex_unlock(&m->m_lock_solaris);
149 #elif OPAL_HAVE_ATOMIC_SPINLOCKS
172 #error No mutex definition
183 #if OPAL_HAVE_ATOMIC_SPINLOCKS
static void opal_mutex_lock(opal_mutex_t *mutex)
Acquire a mutex.
static int opal_mutex_atomic_trylock(opal_mutex_t *mutex)
Try to acquire a mutex using atomic operations.
static void opal_mutex_atomic_unlock(opal_mutex_t *mutex)
Release a mutex using atomic operations.
Definition: mutex_unix.h:53
static int opal_mutex_trylock(opal_mutex_t *mutex)
Try to acquire a mutex.
Volatile lock object (with optional padding).
Definition: atomic.h:102
Functions for multi-threaded applications using Libevent.
static void opal_atomic_unlock(opal_atomic_lock_t *lock)
Release a lock.
static void opal_mutex_unlock(opal_mutex_t *mutex)
Release a mutex.
Base object.
Definition: opal_object.h:182
static void opal_atomic_lock(opal_atomic_lock_t *lock)
Acquire a lock by spinning.
static int opal_atomic_trylock(opal_atomic_lock_t *lock)
Try to acquire a lock.
A simple C-language object-oriented system with single inheritance and ownership-based memory managem...
static void opal_mutex_atomic_lock(opal_mutex_t *mutex)
Acquire a mutex using atomic operations.
#define OBJ_CLASS_DECLARATION(NAME)
Declaration for class descriptor.
Definition: opal_object.h:236