Equalizer  1.2.1
Public Member Functions
co::base::SpinLock Class Reference

A fast lock for uncontended memory access. More...

#include <spinLock.h>

+ Inheritance diagram for co::base::SpinLock:
+ Collaboration diagram for co::base::SpinLock:

List of all members.

Public Member Functions

 SpinLock ()
 Construct a new lock.
 ~SpinLock ()
 Destruct the lock.
void set ()
 Acquire the lock exclusively.
void unset ()
 Release an exclusive lock.
bool trySet ()
 Attempt to acquire the lock exclusively.
void setRead ()
 Acquire the lock shared with other readers.
void unsetRead ()
 Release a shared read lock.
bool trySetRead ()
 Attempt to acquire the lock shared with other readers.
bool isSet ()
 Test if the lock is set.
bool isSetWrite ()
 Test if the lock is set exclusively.
bool isSetRead ()
 Test if the lock is set shared.

Detailed Description

A fast lock for uncontended memory access.

If Thread::yield does not work like expected, priority inversion is possible. If used as a read-write lock, readers or writers will starve on high contention.

See also:
ScopedMutex

Definition at line 38 of file spinLock.h.


Constructor & Destructor Documentation

Construct a new lock.

Version:
1.0

Definition at line 45 of file spinLock.h.

Destruct the lock.

Version:
1.0

Definition at line 48 of file spinLock.h.


Member Function Documentation

bool co::base::SpinLock::isSet ( ) [inline]

Test if the lock is set.

Returns:
true if the lock is set, false if it is not set.
Version:
1.0

Definition at line 136 of file spinLock.h.

bool co::base::SpinLock::isSetRead ( ) [inline]

Test if the lock is set shared.

Returns:
true if the lock is set, false if it is not set.
Version:
1.1.2

Definition at line 152 of file spinLock.h.

Referenced by trySetRead().

+ Here is the caller graph for this function:

bool co::base::SpinLock::isSetWrite ( ) [inline]

Test if the lock is set exclusively.

Returns:
true if the lock is set, false if it is not set.
Version:
1.1.2

Definition at line 144 of file spinLock.h.

Referenced by trySet().

+ Here is the caller graph for this function:

void co::base::SpinLock::set ( ) [inline]

Acquire the lock exclusively.

Version:
1.0

Definition at line 51 of file spinLock.h.

References trySet().

+ Here is the call graph for this function:

void co::base::SpinLock::setRead ( ) [inline]

Acquire the lock shared with other readers.

Version:
1.1.2

Definition at line 84 of file spinLock.h.

References trySetRead().

+ Here is the call graph for this function:

bool co::base::SpinLock::trySet ( ) [inline]

Attempt to acquire the lock exclusively.

Returns:
true if the lock was set, false if it was not set.
Version:
1.0

Definition at line 75 of file spinLock.h.

References co::base::Atomic< T >::compareAndSwap(), and isSetWrite().

Referenced by set().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

bool co::base::SpinLock::trySetRead ( ) [inline]

Attempt to acquire the lock shared with other readers.

Returns:
true if the lock was set, false if it was not set.
Version:
1.1.2

Definition at line 114 of file spinLock.h.

References co::base::Atomic< T >::compareAndSwap(), isSetRead(), and co::base::memoryBarrier().

Referenced by setRead().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void co::base::SpinLock::unset ( ) [inline]

Release an exclusive lock.

Version:
1.0

Definition at line 62 of file spinLock.h.

void co::base::SpinLock::unsetRead ( ) [inline]

Release a shared read lock.

Version:
1.1.2

Definition at line 95 of file spinLock.h.

References co::base::Atomic< T >::compareAndSwap(), and co::base::memoryBarrier().

+ Here is the call graph for this function:


The documentation for this class was generated from the following file:
Generated on Fri Jun 8 2012 15:44:34 for Equalizer 1.2.1 by  doxygen 1.8.0