Zero  0.1.0
Classes | Macros | Variables
mcs_lock.h File Reference
#include "AtomicCounter.hpp"
#include "w_defines.h"

Go to the source code of this file.

Classes

union  qnode_status
 
struct  mcs_lock
 An MCS queuing spinlock. More...
 
struct  mcs_lock::qnode
 
struct  mcs_lock::ext_qnode
 

Macros

#define MCS_EXT_QNODE_INITIALIZER   {{NULL,false},NULL}
 
#define MCS_EXT_QNODE_INITIALIZE(x)   { (x)._node._next = NULL; (x)._node._waiting = 0; (x)._node._delegated = 0; (x)._held = NULL; }
 

Variables

const qnode_status QNODE_IDLE = {{0, 0}}
 
const qnode_status QNODE_WAITING = {{1, 0}}
 
const qnode_status QNODE_DELEGATED = {{1, 1}}
 
const size_t CACHELINE_MCS_PADDING = CACHELINE_SIZE - sizeof(mcs_lock)
 

Macro Definition Documentation

§ MCS_EXT_QNODE_INITIALIZE

#define MCS_EXT_QNODE_INITIALIZE (   x)    { (x)._node._next = NULL; (x)._node._waiting = 0; (x)._node._delegated = 0; (x)._held = NULL; }

§ MCS_EXT_QNODE_INITIALIZER

#define MCS_EXT_QNODE_INITIALIZER   {{NULL,false},NULL}

Variable Documentation

§ CACHELINE_MCS_PADDING

const size_t CACHELINE_MCS_PADDING = CACHELINE_SIZE - sizeof(mcs_lock)

Used to keep mcs_lock in its own cacheline.

§ QNODE_DELEGATED

const qnode_status QNODE_DELEGATED = {{1, 1}}

§ QNODE_IDLE

const qnode_status QNODE_IDLE = {{0, 0}}

§ QNODE_WAITING

const qnode_status QNODE_WAITING = {{1, 0}}