3 #ifndef __ZMQ_MUTEX_HPP_INCLUDED__
4 #define __ZMQ_MUTEX_HPP_INCLUDED__
11 #if defined(ZMQ_HAVE_WINDOWS) && !defined(ZMQ_USE_CV_IMPL_PTHREADS)
20 mutex_t () { InitializeCriticalSection (&_cs); }
22 ~mutex_t () { DeleteCriticalSection (&_cs); }
24 void lock () { EnterCriticalSection (&_cs); }
26 bool try_lock () {
return (TryEnterCriticalSection (&_cs)) ?
true :
false; }
28 void unlock () { LeaveCriticalSection (&_cs); }
30 CRITICAL_SECTION *get_cs () {
return &_cs; }
39 #elif defined ZMQ_HAVE_VXWORKS
52 semMCreate (SEM_Q_PRIORITY | SEM_INVERSION_SAFE | SEM_DELETE_SAFE);
55 inline ~mutex_t () { semDelete (_semId); }
57 inline void lock () { semTake (_semId, WAIT_FOREVER); }
61 if (semTake (_semId, NO_WAIT) == OK) {
67 inline void unlock () { semGive (_semId); }
87 int rc = pthread_mutexattr_init (&
_attr);
90 rc = pthread_mutexattr_settype (&
_attr, PTHREAD_MUTEX_RECURSIVE);
99 int rc = pthread_mutex_destroy (&
_mutex);
102 rc = pthread_mutexattr_destroy (&
_attr);
108 int rc = pthread_mutex_lock (&
_mutex);
114 int rc = pthread_mutex_trylock (&
_mutex);
124 int rc = pthread_mutex_unlock (&
_mutex);