Zero  0.1.0
Classes | Macros | Typedefs | Functions
latches.h File Reference
#include "w_base.h"
#include "timeout.h"
#include "w_pthread.h"
#include "AtomicCounter.hpp"
#include "tatas.h"
#include "mcs_lock.h"
#include "critical_section.h"

Go to the source code of this file.

Classes

struct  w_pthread_lock_t
 Wrapper for pthread mutexes, with a queue-based lock API. More...
 
struct  occ_rwlock
 A multiple-reader/single-writer lock based on pthreads (blocking) More...
 
class  mcs_rwlock
 Shore read-write lock:: many-reader/one-writer spin lock. More...
 
class  spinlock_read_critical_section
 
class  spinlock_write_critical_section
 

Macros

#define QUEUE_BLOCK_EXT_QNODE_INITIALIZER   PTHREAD_EXT_QNODE_INITIALIZER
 
#define QUEUE_BLOCK_EXT_QNODE_INITIALIZE(x)   x._held = NULL
 
#define QUEUE_SPIN_EXT_QNODE_INITIALIZER   MCS_EXT_QNODE_INITIALIZER
 
#define QUEUE_EXT_QNODE_INITIALIZER   MCS_EXT_QNODE_INITIALIZER
 
#define QUEUE_EXT_QNODE_INITIALIZE(x)   MCS_EXT_QNODE_INITIALIZE(x)
 
#define MUTEX_ACQUIRE(mutex)   W_COERCE((mutex).acquire());
 
#define MUTEX_RELEASE(mutex)   (mutex).release();
 
#define MUTEX_IS_MINE(mutex)   (mutex).is_mine()
 

Typedefs

typedef w_pthread_lock_t queue_based_block_lock_t
 
typedef mcs_lock queue_based_spin_lock_t
 
typedef mcs_lock queue_based_lock_t
 
typedef mcs_rwlock srwlock_t
 

Functions

 SPECIALIZE_CS (tatas_lock, int _dummy,(_dummy=0), _mutex->acquire(), _mutex->release())
 
 SPECIALIZE_CS (w_pthread_lock_t, w_pthread_lock_t::ext_qnode _me,(_me._held=0), _mutex->acquire(&_me), _mutex->release(&_me))
 
 SPECIALIZE_CS (mcs_lock, mcs_lock::ext_qnode _me,(_me._held=0), _mutex->acquire(&_me), _mutex->release(&_me))
 
 SPECIALIZE_CS (occ_rwlock::occ_rlock, int _dummy,(_dummy=0), _mutex->acquire(), _mutex->release())
 
 SPECIALIZE_CS (occ_rwlock::occ_wlock, int _dummy,(_dummy=0), _mutex->acquire(), _mutex->release())
 

Macro Definition Documentation

§ MUTEX_ACQUIRE

#define MUTEX_ACQUIRE (   mutex)    W_COERCE((mutex).acquire());

§ MUTEX_IS_MINE

#define MUTEX_IS_MINE (   mutex)    (mutex).is_mine()

§ MUTEX_RELEASE

#define MUTEX_RELEASE (   mutex)    (mutex).release();

§ QUEUE_BLOCK_EXT_QNODE_INITIALIZE

#define QUEUE_BLOCK_EXT_QNODE_INITIALIZE (   x)    x._held = NULL

§ QUEUE_BLOCK_EXT_QNODE_INITIALIZER

#define QUEUE_BLOCK_EXT_QNODE_INITIALIZER   PTHREAD_EXT_QNODE_INITIALIZER

§ QUEUE_EXT_QNODE_INITIALIZE

#define QUEUE_EXT_QNODE_INITIALIZE (   x)    MCS_EXT_QNODE_INITIALIZE(x)

§ QUEUE_EXT_QNODE_INITIALIZER

#define QUEUE_EXT_QNODE_INITIALIZER   MCS_EXT_QNODE_INITIALIZER

§ QUEUE_SPIN_EXT_QNODE_INITIALIZER

#define QUEUE_SPIN_EXT_QNODE_INITIALIZER   MCS_EXT_QNODE_INITIALIZER

Typedef Documentation

§ queue_based_block_lock_t

§ queue_based_lock_t

§ queue_based_spin_lock_t

§ srwlock_t

Function Documentation

§ SPECIALIZE_CS() [1/5]

SPECIALIZE_CS ( tatas_lock  ,
int  _dummy,
(_dummy=0)  ,
_mutex->  acquire(),
_mutex->  release() 
)

§ SPECIALIZE_CS() [2/5]

SPECIALIZE_CS ( w_pthread_lock_t  ,
w_pthread_lock_t::ext_qnode  _me,
(_me._held=0)  ,
_mutex->acquire &  _me,
_mutex->release &  _me 
)

§ SPECIALIZE_CS() [3/5]

SPECIALIZE_CS ( mcs_lock  ,
mcs_lock::ext_qnode  _me,
(_me._held=0)  ,
_mutex->acquire &  _me,
_mutex->release &  _me 
)

§ SPECIALIZE_CS() [4/5]

SPECIALIZE_CS ( occ_rwlock::occ_rlock  ,
int  _dummy,
(_dummy=0)  ,
_mutex->  acquire(),
_mutex->  release() 
)

§ SPECIALIZE_CS() [5/5]

SPECIALIZE_CS ( occ_rwlock::occ_wlock  ,
int  _dummy,
(_dummy=0)  ,
_mutex->  acquire(),
_mutex->  release() 
)