fesa-core  4.2.0
fesa::RWLock Class Reference

#include <RWLock.h>

Inheritance diagram for fesa::RWLock:
fesa::SharedRWLock

Public Member Functions

void lockForReading ()
 
void lockForWriting ()
 
void unlock ()
 
void unlock (int nLocksToKeep)
 
bool isReadLockHeld () const
 
bool isWriteLockHeld () const
 
bool isLockHeld () const
 
const RWLockStatus & getLockStatus () const
 

Protected Member Functions

 RWLock (bool initialize)
 
void checkAlignment () const
 

Detailed Description

Object which allows mutual exclusion between threads. Any number of threads can simultaneously hold a lock for reading. Only one thread can hold a lock for writing, and only when no thread holds a lock for reading. The class wraps a pthread_rwlock_t and tracks locks and unlocks per thread. This allows recursive read and write locks with a single lock of the pthread_rwlock. If the first recursive lock request from the unlocked state is lockForReading a read-lock will be acquired and all subsequent lock requests may only be read-locks. If the first recursive lock request from the unlocked state is lockForWriting a write-lock will be acquired and all subsequent lock requests may be read- or write-locks.

For general use it is recommended to use the ReadLock/WriteLock classes to ensure all locks are released.

Constructor & Destructor Documentation

fesa::RWLock::RWLock ( bool  initialize)
protected

Constructor which can skip initialization of rwlock_.

Parameters
initializethe read-write lock is initialized only if this is true.

Member Function Documentation

void fesa::RWLock::checkAlignment ( ) const
protected

Checks that rwlock_ is properly aligned.

Exceptions
FesaExceptionif rwlock_ is not properly aligned.
const RWLockStatus & fesa::RWLock::getLockStatus ( ) const

Returns the status of this RWLock object.

bool fesa::RWLock::isLockHeld ( ) const

Returns true if the current thread holds a lock of any kind on this RWLock object.

bool fesa::RWLock::isReadLockHeld ( ) const

Returns true if the current thread holds a read-lock on this RWLock object.

bool fesa::RWLock::isWriteLockHeld ( ) const

Returns true if the current thread holds a write-lock on this RWLock object.

void fesa::RWLock::lockForReading ( )

Locks the read-write lock for reading. Many threads can hold a read lock at one time.

void fesa::RWLock::lockForWriting ( )

Locks the read-write lock for writing. Only one thread can hold a write lock at one time.

void fesa::RWLock::unlock ( )

Releases a read- or write-lock. An object locked for reading is unlocked when all readers have called unlock. An object locked for writing is unlocked when the writer has called unlock.

void fesa::RWLock::unlock ( int  nLocksToKeep)

Releases all the read- and write-locks of the calling thread except the given number

Parameters
nLocksToKeepThe number of locks that should not be released

The documentation for this class was generated from the following files: