Zero  0.1.0
Classes | Public Member Functions | Public Attributes | List of all members
mcs_lock Struct Reference

An MCS queuing spinlock. More...

#include <mcs_lock.h>

Inheritance diagram for mcs_lock:
mcs_rwlock

Classes

struct  ext_qnode
 
struct  qnode
 

Public Member Functions

 mcs_lock ()
 
void spin_on_waiting (qnode *me)
 
bool attempt (ext_qnode *me)
 
bool attempt (qnode *me)
 
void * acquire (ext_qnode *me)
 
void * acquire (qnode *me)
 
qnode__unsafe_begin_acquire (qnode *me)
 
void * __unsafe_end_acquire (qnode *me, qnode *pred)
 
qnodespin_on_next (qnode *me)
 
void release (ext_qnode *me)
 
void release (ext_qnode &me)
 
void release (qnode &me)
 
void release (qnode *me)
 
bool is_mine (ext_qnode *me)
 

Public Attributes

qnode_tail
 

Detailed Description

An MCS queuing spinlock.

Useful for short, contended critical sections. If contention is expected to be rare, use a tatas_lock; if critical sections are long, use pthread_mutex_t so the thread can block instead of spinning.

Tradeoffs are:

Constructor & Destructor Documentation

§ mcs_lock()

mcs_lock::mcs_lock ( )
inline

Member Function Documentation

§ __unsafe_begin_acquire()

qnode* mcs_lock::__unsafe_begin_acquire ( qnode me)
inline

§ __unsafe_end_acquire()

void* mcs_lock::__unsafe_end_acquire ( qnode me,
qnode pred 
)
inline

§ acquire() [1/2]

void* mcs_lock::acquire ( ext_qnode me)
inline

§ acquire() [2/2]

void* mcs_lock::acquire ( qnode me)
inline

§ attempt() [1/2]

bool mcs_lock::attempt ( ext_qnode me)
inline

§ attempt() [2/2]

bool mcs_lock::attempt ( qnode me)
inline

§ is_mine()

bool mcs_lock::is_mine ( ext_qnode me)
inline

§ release() [1/4]

void mcs_lock::release ( ext_qnode me)
inline

§ release() [2/4]

void mcs_lock::release ( ext_qnode me)
inline

§ release() [3/4]

void mcs_lock::release ( qnode me)
inline

§ release() [4/4]

void mcs_lock::release ( qnode me)
inline

§ spin_on_next()

qnode* mcs_lock::spin_on_next ( qnode me)
inline

§ spin_on_waiting()

void mcs_lock::spin_on_waiting ( qnode me)
inline

Member Data Documentation

§ _tail

qnode* mcs_lock::_tail

The documentation for this struct was generated from the following file: