1#if !ALIB_SINGLE_THREADED
24 Dbg.AssertNotOwning(
ALIB_CALLER, ci,
"Illegal nested acquisition" );
26 if ( !
Dbg.WaitTimeLimit.IsZero() ) {
27 Ticks::Duration waitDuration=
Dbg.WaitTimeLimit;
30 while (!
mutex.try_lock_for( (waitDuration - waitTimer.
Age()).Export() ) ) {
31 if ( waitTimer.
Age() < waitDuration )
35 NAString msg(
"Waiting to acquire a lock since "); msg << overallTimer.
Age();
38 std::string msg(
"Waiting to acquire a lock since ");
39 msg+= std::format(
"{}", overallTimer.
Age().InAbsoluteMilliseconds());
53 Dbg.AssertNotOwning(
ALIB_CALLER, ci,
"Illegal nested acquisition" );
55 if (!
mutex.try_lock() )
75 Ticks::Duration remainingDuration= waitDuration;
77 while (!
mutex.try_lock_for( remainingDuration.Export() ) )
79 remainingDuration= waitDuration - timer.
Age();
80 if ( remainingDuration.IsPositive() )
89 Dbg.AssertNotOwning(
ALIB_CALLER, ci,
"Illegal nested acquisition" );
91 if ( !
Dbg.WaitTimeLimit.IsZero() ) {
92 Ticks::Duration waitDuration=
Dbg.WaitTimeLimit;
95 while (!
mutex.try_lock_for( (waitDuration - waitTimer.
Age()).Export() ) ) {
96 if ( waitTimer.
Age() < waitDuration )
100 NAString msg(
"Waiting to acquire a lock since "); msg << overallTimer.
Age();
103 std::string msg(
"Waiting to acquire a lock since ");
104 msg+= std::format(
"{}", overallTimer.
Age().InAbsoluteMilliseconds());
118 Dbg.AssertNotOwning(
ALIB_CALLER, ci,
"Illegal nested acquisition" );
120 if (!
mutex.try_lock() )
129 Dbg.AssertNotOwning(
ALIB_CALLER, ci,
"Illegal nested acquisition" );
131 Ticks::Duration remainingDuration= waitDuration;
133 while (!
mutex.try_lock_for( remainingDuration.Export() ) ) {
134 remainingDuration= waitDuration - timer.
Age();
135 if ( remainingDuration.IsPositive() )
152 if ( !
Dbg.WaitTimeLimit.IsZero() ) {
153 Ticks::Duration waitDuration=
Dbg.WaitTimeLimit;
156 while (!
mutex.try_lock_for( (waitDuration - waitTimer.
Age()).Export() ) ) {
157 if ( waitTimer.
Age() < waitDuration )
161 NAString msg(
"Waiting to acquire a lock since "); msg << overallTimer.
Age();
164 std::string msg(
"Waiting to acquire a lock since ");
165 msg+= std::format(
"{}", overallTimer.
Age().InAbsoluteMilliseconds());
178 if (!
mutex.try_lock() )
194 Ticks::Duration remainingDuration= waitDuration;
196 while (!
mutex.try_lock_for( remainingDuration.Export() ) )
198 remainingDuration= waitDuration - timer.
Age();
199 if ( remainingDuration.IsPositive() )
207 if ( !
Dbg.WaitTimeLimit.IsZero() ) {
208 Ticks::Duration waitDuration=
Dbg.WaitTimeLimit;
211 while (!
mutex.try_lock_for( (waitDuration - waitTimer.
Age()).Export() ) ) {
212 if ( waitTimer.
Age() < waitDuration )
216 NAString msg(
"Waiting to acquire a lock since "); msg << overallTimer.
Age();
219 std::string msg(
"Waiting to acquire a lock since ");
220 msg+= std::format(
"{}", overallTimer.
Age().InAbsoluteMilliseconds());
234 if (!
mutex.try_lock() )
243 Ticks::Duration remainingDuration= waitDuration;
245 while (!
mutex.try_lock_for( remainingDuration.Export() ) ) {
246 remainingDuration= waitDuration - timer.
Age();
247 if ( remainingDuration.IsPositive() )
265 Dbg.AssertNotOwning(
ALIB_CALLER, ci,
"Illegal nested acquisition" );
267 if ( !
Dbg.WaitTimeLimit.IsZero() ) {
268 Ticks::Duration waitDuration=
Dbg.WaitTimeLimit;
271 while (!
mutex.try_lock_for( (waitDuration - waitTimer.
Age()).Export() ) ) {
272 if ( waitTimer.
Age() < waitDuration )
276 NAString msg(
"Waiting to acquire a lock since "); msg << overallTimer.
Age();
279 std::string msg(
"Waiting to acquire a lock since ");
280 msg+= std::format(
"{}", overallTimer.
Age().InAbsoluteMilliseconds());
294 Dbg.AssertNotOwning(
ALIB_CALLER, ci,
"Illegal nested acquisition" );
296 if (!
mutex.try_lock() )
311 "AcquireShared while already owning. (This is not allowed with std::shared_lock)" );
313 if ( !
Dbg.WaitTimeLimit.IsZero() ) {
314 Ticks::Duration waitDuration=
Dbg.WaitTimeLimit;
317 while (!
mutex.try_lock_shared_for( (waitDuration - waitTimer.
Age()).Export() ) ) {
318 if ( waitTimer.
Age() < waitDuration )
322 NAString msg(
"Waiting to acquire a lock since "); msg << overallTimer.
Age();
325 std::string msg(
"Waiting to acquire a lock since ");
326 msg+= std::format(
"{}", overallTimer.
Age().InAbsoluteMilliseconds());
341 "AcquireShared while already owning. (This is not allowed with std::shared_lock)" );
343 if ( !
mutex.try_lock_shared() )
353 mutex.unlock_shared();
360 Ticks::Duration remainingDuration= waitDuration;
362 while (!
mutex.try_lock_for( remainingDuration.Export() ) )
364 remainingDuration= waitDuration - timer.
Age();
365 if ( remainingDuration.IsPositive() )
373 Dbg.AssertNotOwning(
ALIB_CALLER, ci,
"Illegal nested acquisition" );
375 if ( !
Dbg.WaitTimeLimit.IsZero() ) {
376 Ticks::Duration waitDuration=
Dbg.WaitTimeLimit;
379 while (!
mutex.try_lock_for( (waitDuration - waitTimer.
Age()).Export() ) ) {
380 if ( waitTimer.
Age() < waitDuration )
384 NAString msg(
"Waiting to acquire a lock since "); msg << overallTimer.
Age();
387 std::string msg(
"Waiting to acquire a lock since ");
388 msg+= std::format(
"{}", overallTimer.
Age().InAbsoluteMilliseconds());
401 Dbg.AssertNotOwning(
ALIB_CALLER, ci,
"Illegal nested acquisition" );
403 if (!
mutex.try_lock() )
412 Dbg.AssertNotOwning(
ALIB_CALLER, ci,
"Illegal nested acquisition" );
414 Ticks::Duration remainingDuration= waitDuration;
416 while (!
mutex.try_lock_for( remainingDuration.Export() ) ) {
417 remainingDuration= waitDuration - timer.
Age();
418 if ( remainingDuration.IsPositive() )
437 Ticks::Duration remainingDuration= waitDuration;
439 while (!
mutex.try_lock_shared_for( remainingDuration.Export() ) )
441 remainingDuration= waitDuration - timer.
Age();
442 if ( remainingDuration.IsPositive() )
453 "AcquireShared while already owning. (This is not allowed with std::shared_lock)" );
455 if ( !
Dbg.WaitTimeLimit.IsZero() ) {
456 Ticks::Duration waitDuration=
Dbg.WaitTimeLimit;
459 while (!
mutex.try_lock_shared_for( (waitDuration - waitTimer.
Age()).Export() ) ) {
460 if ( waitTimer.
Age() < waitDuration )
464 NAString msg(
"Waiting to acquire a lock since "); msg << overallTimer.
Age();
467 std::string msg(
"Waiting to acquire a lock since ");
468 msg+= std::format(
"{}", overallTimer.
Age().InAbsoluteMilliseconds());
483 "AcquireShared while already owning. (This is not allowed with std::shared_lock)" );
485 if ( !
mutex.try_lock_shared() )
495 "AcquireShared while already owning. (This is not allowed with std::shared_lock)" );
497 Ticks::Duration remainingDuration= waitDuration;
499 while (!
mutex.try_lock_shared_for( remainingDuration.Export() ) ) {
500 remainingDuration= waitDuration - timer.
Age();
501 if ( remainingDuration.IsPositive() )
513 mutex.unlock_shared();
518#if ALIB_DEBUG_CRITICAL_SECTIONS
519bool Lock ::DCSIsAcquired ()
const {
return Dbg.IsOwnedByCurrentThread(); }
520bool Lock ::DCSIsSharedAcquired()
const {
return Dbg.IsOwnedByCurrentThread(); }
521bool TimedLock ::DCSIsAcquired ()
const {
return Dbg.IsOwnedByCurrentThread(); }
522bool TimedLock ::DCSIsSharedAcquired()
const {
return Dbg.IsOwnedByCurrentThread(); }
523bool RecursiveLock ::DCSIsAcquired ()
const {
return Dbg.IsOwnedByCurrentThread(); }
524bool RecursiveLock ::DCSIsSharedAcquired()
const {
return Dbg.IsOwnedByCurrentThread(); }
527bool SharedLock ::DCSIsAcquired ()
const {
return Dbg.IsOwnedByCurrentThread(); }
528bool SharedLock ::DCSIsSharedAcquired()
const {
return Dbg.IsSharedOwnedByAnyThread()
529 ||
Dbg.IsOwnedByCurrentThread(); }
530bool SharedTimedLock ::DCSIsAcquired ()
const {
return Dbg.IsOwnedByCurrentThread(); }
531bool SharedTimedLock ::DCSIsSharedAcquired()
const {
return Dbg.IsSharedOwnedByAnyThread()
532 ||
Dbg.IsOwnedByCurrentThread(); }
DbgLockAsserter Dbg
The debug tool instance.
void Release(ALIB_DBG_TAKE_CI)
bool TryAcquire(ALIB_DBG_TAKE_CI)
void Acquire(ALIB_DBG_TAKE_CI)
void AcquireRecursive(ALIB_DBG_TAKE_CI)
std::recursive_mutex mutex
void ReleaseRecursive(ALIB_DBG_TAKE_CI)
bool TryAcquire(ALIB_DBG_TAKE_CI)
DbgLockAsserter Dbg
The debug tool instance.
void ReleaseRecursive(ALIB_DBG_TAKE_CI)
DbgLockAsserter Dbg
The debug tool instance.
virtual bool DCSIsAcquired() const override
std::recursive_timed_mutex mutex
The internal object to lock on.
virtual bool DCSIsSharedAcquired() const override
bool TryAcquireTimed(const Ticks::Duration &waitDuration, const CallerInfo &ci)
void AcquireRecursive(ALIB_DBG_TAKE_CI)
bool TryAcquire(ALIB_DBG_TAKE_CI)
bool TryAcquire(ALIB_DBG_TAKE_CI)
std::atomic< int > DbgWarningMaximumShared
void Release(ALIB_DBG_TAKE_CI)
DbgSharedLockAsserter Dbg
The debug tool instance.
void ReleaseShared(ALIB_DBG_TAKE_CI)
void AcquireShared(ALIB_DBG_TAKE_CI)
bool TryAcquireShared(ALIB_DBG_TAKE_CI)
void Acquire(ALIB_DBG_TAKE_CI)
DbgSharedLockAsserter Dbg
The debug tool instance.
std::shared_timed_mutex mutex
The internal object to lock on.
void AcquireShared(ALIB_DBG_TAKE_CI)
void Acquire(ALIB_DBG_TAKE_CI)
bool TryAcquireShared(ALIB_DBG_TAKE_CI)
std::atomic< int > DbgWarningMaximumShared
void ReleaseShared(ALIB_DBG_TAKE_CI)
bool TryAcquireTimed(const Ticks::Duration &waitDuration, const CallerInfo &ci)
bool TryAcquireSharedTimed(const Ticks::Duration &waitDuration, const CallerInfo &ci)
void Release(ALIB_DBG_TAKE_CI)
bool TryAcquire(ALIB_DBG_TAKE_CI)
DbgLockAsserter Dbg
The debug tool instance.
bool TryAcquireTimed(const Ticks::Duration &waitDuration, const CallerInfo &ci)
void Release(ALIB_DBG_TAKE_CI)
std::timed_mutex mutex
The internal object to lock on.
bool TryAcquire(ALIB_DBG_TAKE_CI)
void Acquire(ALIB_DBG_TAKE_CI)
strings::TAString< nchar, lang::HeapAllocator > NAString
Type alias in namespace #"%alib".
lang::CallerInfo CallerInfo
Type alias in namespace #"%alib".
time::Ticks Ticks
Type alias in namespace #"%alib".