Public Types | Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | Friends | List of all members
xsens::MutexReadWriteSuspendable Class Reference

A readers-writer mutex class that is able to be suspended. More...

#include <xsens_mutex.h>

Inheritance diagram for xsens::MutexReadWriteSuspendable:
Inheritance graph
[legend]

Public Types

enum  Mode { Mode::Read, Mode::Write, Mode::SuspendedWrite }
 An enum class that holds a three different modes of a suspendable mutex. More...
 

Public Member Functions

 MutexReadWriteSuspendable ()
 
int status () const volatile
 
 ~MutexReadWriteSuspendable ()
 

Protected Member Functions

bool claimMutex (bool write)
 Claims (locks) a mutex for read or write modes. More...
 
bool claimMutex (Mode mode)
 Claims (locks) a mutex using a given mode. More...
 
bool downgradeToRead (bool decreaseSuspend)
 Downgrade an existing write lock to a read lock. More...
 
bool haveReadClaim () const volatile
 
bool haveWriteClaim () const volatile
 
bool releaseMutex (bool write, bool decreaseSuspendCount)
 Releases (unlocks) a mutex for read or write modes. More...
 
bool releaseMutex (Mode mode, bool decreaseSuspendCount)
 Releases (unlocks) a mutex using a given mode. More...
 
bool resumeWriteLock ()
 Resumes an existing write lock so read locks are no longer allowed. More...
 
bool suspendWriteLock ()
 Suspend an existing write lock so read locks are allowed, but do not allow other write locks. More...
 

Private Member Functions

void addReadLock (XsThreadId cid)
 
void enterAtomic ()
 
void leaveAtomic ()
 
 MutexReadWriteSuspendable (MutexReadWriteSuspendable &&)=delete
 
 MutexReadWriteSuspendable (MutexReadWriteSuspendable const &)=delete
 
MutexReadWriteSuspendableoperator= (MutexReadWriteSuspendable &&)=delete
 
MutexReadWriteSuspendableoperator= (MutexReadWriteSuspendable const &)=delete
 

Private Attributes

Mutex m_access
 
int m_readLockCount
 
XsThreadIdm_readLocked
 
int m_readLockMax
 
volatile std::atomic< XsThreadIdm_writeLocked
 
volatile std::atomic_int m_writeLocksPending
 
volatile std::atomic_int m_writeLockSuspendCount
 
volatile std::atomic_int m_writeRef
 

Friends

class LockSuspendable
 

Detailed Description

A readers-writer mutex class that is able to be suspended.

Definition at line 564 of file xsens_mutex.h.

Member Enumeration Documentation

◆ Mode

An enum class that holds a three different modes of a suspendable mutex.

Enumerator
Read 
Write 
SuspendedWrite 

Definition at line 585 of file xsens_mutex.h.

Constructor & Destructor Documentation

◆ MutexReadWriteSuspendable() [1/3]

xsens::MutexReadWriteSuspendable::MutexReadWriteSuspendable ( MutexReadWriteSuspendable const &  )
privatedelete

◆ MutexReadWriteSuspendable() [2/3]

xsens::MutexReadWriteSuspendable::MutexReadWriteSuspendable ( MutexReadWriteSuspendable &&  )
privatedelete

◆ MutexReadWriteSuspendable() [3/3]

xsens::MutexReadWriteSuspendable::MutexReadWriteSuspendable ( )
inline

Definition at line 592 of file xsens_mutex.h.

◆ ~MutexReadWriteSuspendable()

xsens::MutexReadWriteSuspendable::~MutexReadWriteSuspendable ( )
inline

Definition at line 603 of file xsens_mutex.h.

Member Function Documentation

◆ addReadLock()

void xsens::MutexReadWriteSuspendable::addReadLock ( XsThreadId  cid)
inlineprivate

Definition at line 608 of file xsens_mutex.h.

◆ claimMutex() [1/2]

bool xsens::MutexReadWriteSuspendable::claimMutex ( bool  write)
inlineprotected

Claims (locks) a mutex for read or write modes.

Parameters
writeIf set to true write mode is used, otherwise read mode
Returns
True if successful
Note
Made for backwards compatibility

Definition at line 748 of file xsens_mutex.h.

◆ claimMutex() [2/2]

bool xsens::MutexReadWriteSuspendable::claimMutex ( Mode  mode)
inlineprotected

Claims (locks) a mutex using a given mode.

Parameters
modeThe mode to use
Returns
True if successful

Definition at line 637 of file xsens_mutex.h.

◆ downgradeToRead()

bool xsens::MutexReadWriteSuspendable::downgradeToRead ( bool  decreaseSuspend)
inlineprotected

Downgrade an existing write lock to a read lock.

Definition at line 755 of file xsens_mutex.h.

◆ enterAtomic()

void xsens::MutexReadWriteSuspendable::enterAtomic ( )
inlineprivate

Definition at line 621 of file xsens_mutex.h.

◆ haveReadClaim()

bool xsens::MutexReadWriteSuspendable::haveReadClaim ( ) const volatile
inlineprotected
Returns
True if is has a read lock

Definition at line 938 of file xsens_mutex.h.

◆ haveWriteClaim()

bool xsens::MutexReadWriteSuspendable::haveWriteClaim ( ) const volatile
inlineprotected
Returns
True if is has an write lock

Definition at line 931 of file xsens_mutex.h.

◆ leaveAtomic()

void xsens::MutexReadWriteSuspendable::leaveAtomic ( )
inlineprivate

Definition at line 626 of file xsens_mutex.h.

◆ operator=() [1/2]

MutexReadWriteSuspendable& xsens::MutexReadWriteSuspendable::operator= ( MutexReadWriteSuspendable &&  )
privatedelete

◆ operator=() [2/2]

MutexReadWriteSuspendable& xsens::MutexReadWriteSuspendable::operator= ( MutexReadWriteSuspendable const &  )
privatedelete

◆ releaseMutex() [1/2]

bool xsens::MutexReadWriteSuspendable::releaseMutex ( bool  write,
bool  decreaseSuspendCount 
)
inlineprotected

Releases (unlocks) a mutex for read or write modes.

Parameters
writeIf set to true, write mode is used, otherwise read mode
decreaseSuspendCountIf set to true, it will decrease a suspend count
Returns
True if successful

Definition at line 837 of file xsens_mutex.h.

◆ releaseMutex() [2/2]

bool xsens::MutexReadWriteSuspendable::releaseMutex ( Mode  mode,
bool  decreaseSuspendCount 
)
inlineprotected

Releases (unlocks) a mutex using a given mode.

Parameters
modeThe mode to use
decreaseSuspendCountIf set to true, it will decrease a suspend count
Returns
True if successful

Definition at line 887 of file xsens_mutex.h.

◆ resumeWriteLock()

bool xsens::MutexReadWriteSuspendable::resumeWriteLock ( )
inlineprotected

Resumes an existing write lock so read locks are no longer allowed.

Definition at line 794 of file xsens_mutex.h.

◆ status()

int xsens::MutexReadWriteSuspendable::status ( ) const volatile
inline
Returns
The status of the current thread
See also
MutexStatusFlags

Definition at line 896 of file xsens_mutex.h.

◆ suspendWriteLock()

bool xsens::MutexReadWriteSuspendable::suspendWriteLock ( )
inlineprotected

Suspend an existing write lock so read locks are allowed, but do not allow other write locks.

Definition at line 778 of file xsens_mutex.h.

Friends And Related Function Documentation

◆ LockSuspendable

friend class LockSuspendable
friend

Definition at line 576 of file xsens_mutex.h.

Member Data Documentation

◆ m_access

Mutex xsens::MutexReadWriteSuspendable::m_access
private

Definition at line 567 of file xsens_mutex.h.

◆ m_readLockCount

int xsens::MutexReadWriteSuspendable::m_readLockCount
private

Definition at line 575 of file xsens_mutex.h.

◆ m_readLocked

XsThreadId* xsens::MutexReadWriteSuspendable::m_readLocked
private

Definition at line 572 of file xsens_mutex.h.

◆ m_readLockMax

int xsens::MutexReadWriteSuspendable::m_readLockMax
private

Definition at line 574 of file xsens_mutex.h.

◆ m_writeLocked

volatile std::atomic<XsThreadId> xsens::MutexReadWriteSuspendable::m_writeLocked
private

Definition at line 569 of file xsens_mutex.h.

◆ m_writeLocksPending

volatile std::atomic_int xsens::MutexReadWriteSuspendable::m_writeLocksPending
private

Definition at line 570 of file xsens_mutex.h.

◆ m_writeLockSuspendCount

volatile std::atomic_int xsens::MutexReadWriteSuspendable::m_writeLockSuspendCount
private

Definition at line 571 of file xsens_mutex.h.

◆ m_writeRef

volatile std::atomic_int xsens::MutexReadWriteSuspendable::m_writeRef
private

Definition at line 568 of file xsens_mutex.h.


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


xsens_mti_driver
Author(s):
autogenerated on Sun Sep 3 2023 02:43:23