ALib C++ Library
Library Version: 2510 R0
Documentation generated by doxygen
Loading...
Searching...
No Matches
alib::threads::DbgSharedLockAsserter Struct Reference

Description:

This type is used for debugging and asserting ALib lock (mutex) types. With debug compilations the shared lock types hold one member of this struct, which aggregates all debug information.

Definition at line 177 of file dbgasserters.inl.

Inheritance diagram for alib::threads::DbgSharedLockAsserter:
[legend]
Collaboration diagram for alib::threads::DbgSharedLockAsserter:
[legend]

Public Static Field Index:

static ALIB_DLL const char * ASSERTION_FORMAT_SHARED
 
- Public Static Field Index: inherited from alib::threads::DbgLockAsserter
static ALIB_DLL const char * ASSERTION_FORMAT
 

Public Field Index:

std::atomic< int > CntSharedAcquirements {0}
 The number of shared acquirements.
 
CallerInfo SAcqCI
 Source location of the most recent shared acquirement.
 
CallerInfo SRelCI
 Source location of the most recent shared release.
 
- Public Field Index: inherited from alib::threads::DbgLockAsserter
CallerInfo AcqCI
 Source location of the most recent acquirement.
 
int16_t CntAcquirements = 0
 The number of nested acquirements.
 
const char * Name ="<unnamed>"
 
int RecursionLimit =10
 
CallerInfo RelCI
 Source location of the most recent release.
 
Ticks::Duration WaitTimeLimit = Ticks::Duration::FromAbsoluteSeconds(2)
 

Public Method Index:

virtual ~DbgSharedLockAsserter () override
 Destructor.
 
void AssertNotOwned (const CallerInfo &assertCI, const CallerInfo &ci, const char *headline)
 
ALIB_DLL void DoAssert (int type, const CallerInfo &assertCI, const CallerInfo &ci, const char *headline) override
 
bool IsSharedOwnedByAnyThread () const
 
- Public Method Index: inherited from alib::threads::DbgLockAsserter
virtual ~DbgLockAsserter ()
 Destructor.
 
void AssertNotOwned (const CallerInfo &assertCI, const CallerInfo &ci, const char *headline)
 
void AssertNotOwnedOrMe (const CallerInfo &assertCI, const CallerInfo &ci, const char *headline)
 
void AssertNotOwning (const CallerInfo &assertCI, const CallerInfo &ci, const char *headline)
 
void AssertOwned (const CallerInfo &assertCI, const CallerInfo &ci, const char *headline)
 
void AssertOwning (const CallerInfo &assertCI, const CallerInfo &ci, const char *headline)
 
ALIB_DLL ThreadGetOwner () const
 
bool IsOwnedByCurrentThread () const
 
bool WillRelease () const noexcept
 

Field Details:

◆ ASSERTION_FORMAT_SHARED

const char * alib::threads::DbgSharedLockAsserter::ASSERTION_FORMAT_SHARED
static
Initial value:
=
"Multi-Threadding {} in Shared-Lock \"{}\"" "\n"
" Message: {}" "\n"
" In (Member-)Function: {}" "\n"
" Is Owned: {} ({})" "\n"
" Is Shared Owned: {} ({})" "\n"
"\n"
" Called By: {}::{}" "\n"
" At: {}:{}" "\n"
" Thread: {}" "\n"
"\n"
" Latest Acquisition By: {}::{}" "\n"
" At: {}:{}" "\n"
" Thread: {}" "\n"
" Latest Release By: {}::{}" "\n"
" At: {}:{}" "\n"
" Thread: {}" "\n"
"\n"
" Latest Shared Acquisition By: {}::{}" "\n"
" At: {}:{}" "\n"
" Thread: {}" "\n"
" Latest SharedRelease By: {}::{}" "\n"
" At: {}:{}" "\n"
" Thread: {}" "\n"

The format string used to write exceptions to the console. This string can be changed if the source information is not "clickable" in a user's development environment.

The default string is optimized for JetBrains CLion and is defined as:

Multi-Threadding {} in Shared-Lock \"{}\"
                       Message: {}
          In (Member-)Function: {}
                      Is Owned: {} ({})
               Is Shared Owned: {} ({})

                     Called By: {}::{}
                            At: {}:{}
                        Thread: {}

         Latest Acquisition By: {}::{}
                            At: {}:{}
                        Thread: {}
             Latest Release By: {}::{}
                            At: {}:{}
                        Thread: {}

  Latest Shared Acquisition By: {}::{}
                            At: {}:{}
                        Thread: {}
       Latest SharedRelease By: {}::{}
                            At: {}:{}
                        Thread: {}

The placeholder fields that this format string refers to are set as follows:

  • 0: String "Assertion" or "Warning"
  • 1: Debug-name of the lock.
  • 2: Headline.
  • 3: Function name.
  • 4: Is acquired (true/false).
  • 5: number of acquirements.
  • 6: Is shared acquired (true/false).
  • 7: number of shared-acquirements.
  • 8-12: CallerInfo of caller.
  • 13-17: CallerInfo of the latest acquisition.
  • 18-22: CallerInfo of the latest release.
  • 23-27: CallerInfo of the latest shared-acquisition.
  • 32-36: CallerInfo of the latest shared-release.

Definition at line 232 of file dbgasserters.inl.

◆ CntSharedAcquirements

std::atomic<int> alib::threads::DbgSharedLockAsserter::CntSharedAcquirements {0}

The number of shared acquirements.

Definition at line 181 of file dbgasserters.inl.

◆ SAcqCI

CallerInfo alib::threads::DbgSharedLockAsserter::SAcqCI

Source location of the most recent shared acquirement.

Definition at line 179 of file dbgasserters.inl.

◆ SRelCI

CallerInfo alib::threads::DbgSharedLockAsserter::SRelCI

Source location of the most recent shared release.

Definition at line 180 of file dbgasserters.inl.

Constructor(s) / Destructor Details:

◆ ~DbgSharedLockAsserter()

virtual alib::threads::DbgSharedLockAsserter::~DbgSharedLockAsserter ( )
inlineoverridevirtual

Destructor.

Definition at line 236 of file dbgasserters.inl.

Method Details:

◆ AssertNotOwned()

void alib::threads::DbgSharedLockAsserter::AssertNotOwned ( const CallerInfo & assertCI,
const CallerInfo & ci,
const char * headline )
inline

Asserts that CntAcquirements is 0

Parameters
assertCILocation where the assertion is placed.
ciLocation of the call to the method that asserted.
headlineThe message.

Definition at line 264 of file dbgasserters.inl.

Here is the call graph for this function:

◆ DoAssert()

void alib::threads::DbgSharedLockAsserter::DoAssert ( int type,
const CallerInfo & assertCI,
const CallerInfo & ci,
const char * headline )
overridevirtual

Assembles assertion info and raises a warning or an error.

See also
Field ASSERTION_FORMAT which allows changing the output format to achieve 'clickable' assertion messages.
Parameters
type0= assertion, 1= warning.
assertCILocation where the assertion is placed.
ciLocation of the call to the method that asserted.
headlineThe message.

Reimplemented from alib::threads::DbgLockAsserter.

Definition at line 100 of file dbgasserters.cpp.

Here is the call graph for this function:

◆ IsSharedOwnedByAnyThread()

bool alib::threads::DbgSharedLockAsserter::IsSharedOwnedByAnyThread ( ) const
inline

Returns true if currently a reader is registered. This method is used to create assertions. of course, to detect assertions, it would be more efficient to check if shared ownership is with the current thread, but a check on this would cost a lot of overhead to realize. This way, at least assertions can be raised when no other thread acquired this lock in shared mode.

Available only in debug-builds.

Returns
true, if the lock is owned by this thread, false if it is owned by another thread or not owned.

Definition at line 258 of file dbgasserters.inl.


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