This class is a simple wrapper around C++ standard library type std::mutex
. Thus, it is used to implement mutual exclusive access to resources by protecting critical code sections from being executed in parallel in concurrent threads.
When a pair of Acquire and Release invocations is performed within the same code block, then it is recommended to use a stack instantiation of class Owner to acquire and release objects of this class. Such a use is highly simplified with macros ALIB_LOCK and ALIB_LOCK_WITH.
This class does not allow nested calls to the method Acquire - method Release has to be invoked (from within the same thread that acquired this mutex), before any other thread can again gain access. Nested acquisitions constitute undefined behavior.
std::mutex
, with debug-compilations class std::timed_mutex
is wrapped.#include <lock.hpp>
Public Field Index: | |
DbgLockAsserter | Dbg |
The debug tool instance. | |
Public Method Index: | |
~Lock () override | |
Destructor. With debug-compilations, asserts that this lock is not acquired. | |
ALIB_API void | Acquire (ALIB_DBG_TAKE_CI) |
virtual ALIB_API bool | DCSIsAcquired () const override |
virtual ALIB_API bool | DCSIsSharedAcquired () const override |
ALIB_API void | Release (ALIB_DBG_TAKE_CI) |
ALIB_API bool | TryAcquire (ALIB_DBG_TAKE_CI) |
Public Method Index: inherited from DbgCriticalSections::AssociatedLock | |
virtual | ~AssociatedLock () |
Virtual Destructor. | |
Protected Field Index: | |
std::mutex | mutex |
DbgLockAsserter Dbg |
|
protected |
|
inlineoverride |
void Acquire | ( | ALIB_DBG_TAKE_CI | ) |
Acquires this lock. In the case that this object is already owned by another thread, the invoking thread is suspended until ownership can be gained. Multiple (nested) calls to this method are not supported and lead to undefined behavior.
Definition at line 312 of file locks.cpp.
|
overridevirtual |
true
if the lock is acquired (in non-shared mode), false
otherwise. Implements DbgCriticalSections::AssociatedLock.
|
overridevirtual |
true
if the lock is shared-acquired (by at least any thread). Otherwise, returns false
. Implements DbgCriticalSections::AssociatedLock.
void Release | ( | ALIB_DBG_TAKE_CI | ) |
Releases ownership of this object. If this method is invoked on an object that is not acquired, in debug-compilations an assertion is raised. In release compilations, this leads to undefined behavior.
Definition at line 360 of file locks.cpp.
|
nodiscard |
Tries to acquire this lock. Multiple (nested) successful calls to this method or method Acquire are not supported and lead to undefined behavior.
true
if the lock was not acquired by a different thread and thus, this call was successful. false
otherwise. Definition at line 346 of file locks.cpp.