ALib C++ Framework
by
Library Version: 2511 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 180 of file dbgasserters.inl.

Inheritance diagram for alib::threads::DbgSharedLockAsserter:
alib::threads::DbgLockAsserter

Public Static Field Index:

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

Public Field Index:

std::atomic< int > CntSharedAcquirements {0}
 The number of shared acquirements.
CallerInfo SAcqCI
 The most recent shared acquirement's caller.
CallerInfo SRelCI
 The most recent shared release caller.
Public Field Index: inherited from alib::threads::DbgLockAsserter
CallerInfo AcqCI
 Source location of the most recent acquirement.
std::atomic< int > CntAcquirements {0}
 The number of shared 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 DoAssert (int type, const CallerInfo &assertCI, const CallerInfo &ci, const char *headline) override
bool IsSharedOwnedByAnyThread () const
void ReleaseShared (const CallerInfo &assertCI, const CallerInfo &requestCI)
void SetOwner (const CallerInfo &assertCI, const CallerInfo &requestCI)
void SetSharedOwner (const CallerInfo &assertCI, const CallerInfo &requestCI, int warnLimit)
Public Method Index: inherited from alib::threads::DbgLockAsserter
virtual ~DbgLockAsserter ()
 Destructor.
void AssertNotOwning (const CallerInfo &assertCI, const CallerInfo &ci, const char *headline)
void AssertOwned (const CallerInfo &assertCI, const CallerInfo &ci)
ThreadGetOwner () const
bool IsOwnedByCurrentThread () const
void Release (const CallerInfo &assertCI, const CallerInfo &requestCI)
void SetOwner (const CallerInfo &assertCI, const CallerInfo &requestCI)
void SetRecursiveOwner (const CallerInfo &assertCI, const CallerInfo &requestCI)
bool WillRelease () const noexcept

Field Details:

◆ ASSERTION_FORMAT_SHARED

const char * alib::threads::DbgSharedLockAsserter::ASSERTION_FORMAT_SHARED
static
Initial value:
=
"Multi-Threading {} 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-Threading {} 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 235 of file dbgasserters.inl.

◆ CntSharedAcquirements

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

The number of shared acquirements.

Definition at line 184 of file dbgasserters.inl.

◆ SAcqCI

CallerInfo alib::threads::DbgSharedLockAsserter::SAcqCI

The most recent shared acquirement's caller.

Definition at line 182 of file dbgasserters.inl.

◆ SRelCI

CallerInfo alib::threads::DbgSharedLockAsserter::SRelCI

The most recent shared release caller.

Definition at line 183 of file dbgasserters.inl.

Constructor(s) / Destructor Details:

◆ ~DbgSharedLockAsserter()

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

Destructor.

Definition at line 239 of file dbgasserters.inl.

Method Details:

◆ 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
Inherited 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 98 of file dbgasserters.cpp.

◆ 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 261 of file dbgasserters.inl.

◆ ReleaseShared()

void alib::threads::DbgSharedLockAsserter::ReleaseShared ( const CallerInfo & assertCI,
const CallerInfo & requestCI )
inline

Asserts that this lock is shared-owned by the thread in ci.

Parameters
assertCILocation where the release is implemented.
requestCILocation where the release was requested (the caller of assertCI)

Definition at line 298 of file dbgasserters.inl.

◆ SetOwner()

void alib::threads::DbgSharedLockAsserter::SetOwner ( const CallerInfo & assertCI,
const CallerInfo & requestCI )
inline

Sets the given caller as the current owner. Asserts that CntAcquirements is 0 when called.

Parameters
assertCILocation where ownership was implemented (usually the lock).
requestCILocation where ownership was requested (the caller of assertCI)

Definition at line 267 of file dbgasserters.inl.

◆ SetSharedOwner()

void alib::threads::DbgSharedLockAsserter::SetSharedOwner ( const CallerInfo & assertCI,
const CallerInfo & requestCI,
int warnLimit )
inline

Sets the given caller as a current shared-owner. Asserts that CntAcquirements is 0 when called.

Parameters
assertCILocation where ownership was implemented (usually the lock).
requestCILocation where ownership was requested (the caller of assertCI)
warnLimitIf this number of shared acquisitions is exceeded, a warning is given.

Definition at line 282 of file dbgasserters.inl.


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