|
Zero
0.1.0
|
An MCS queuing spinlock. More...
#include <mcs_lock.h>
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) |
| qnode * | spin_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 |
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:
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
| qnode* mcs_lock::_tail |
1.8.12