[#BloombergLP-bslmt-MeteredMutex] = xref:BloombergLP.adoc[BloombergLP]::xref:BloombergLP/bslmt.adoc[bslmt]::MeteredMutex :relfileprefix: ../../ :mrdocs: This class implements a mutex, that has the additional capability to keep track of hold time and wait time. The hold time is defined as the cumulative duration for which the mutex was in the locked state. The wait time is defined as the duration for which threads waited for the mutex. == Synopsis Declared in `<bslmt_meteredmutex.h>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- class MeteredMutex; ---- == Member Functions [cols="1,4"] |=== | Name| Description | xref:BloombergLP/bslmt/MeteredMutex/2constructor.adoc[`MeteredMutex`] [.small]#[constructor]# | Create a metered mutex in the unlocked state. | xref:BloombergLP/bslmt/MeteredMutex/2destructor.adoc[`~MeteredMutex`] [.small]#[destructor]# | Destroy this metered mutex. | xref:BloombergLP/bslmt/MeteredMutex/holdTime.adoc[`holdTime`] | Return the hold time (in nanoseconds) accumulated since the most recent call to `resetMetrics` (or `MeteredMutex` if `resetMetrics` was never called). | xref:BloombergLP/bslmt/MeteredMutex/lastResetTime.adoc[`lastResetTime`] | Return the time in nanoseconds (referenced to an arbitrary but fixed origin) of the most recent invocation to `resetMetrics` (or creation time if `resetMetrics` was never invoked). User can calculate the difference (in nanoseconds) between the current time and the last reset time by expression `bsls::TimeUtil::getTimer() ‐ clientMutex.lastResetTime()`. | xref:BloombergLP/bslmt/MeteredMutex/lock.adoc[`lock`] | Acquire the lock on this metered mutex. If this mutex is currently locked, suspend the execution of the current thread until the lock can be acquired. Update the wait and hold time appropriately. The behavior is undefined if the calling thread already owns the lock. | xref:BloombergLP/bslmt/MeteredMutex/resetMetrics.adoc[`resetMetrics`] | Reset the wait and hold time to zero and record the current time. All subsequent calls (that are made before a subsequent call to `resetMetrics`) to `waitTime` (or `holdTime`) will return the wait (or hold) time, accumulated since this call. Also, all subsequent calls (that are made before a subsequent call to `resetMetrics`) to `lastResetTime` will return the time of this call. | xref:BloombergLP/bslmt/MeteredMutex/tryLock.adoc[`tryLock`] | Attempt to acquire the lock on this metered mutex. Return 0 on success, and a non‐zero value if this mutex is already locked, or if an error occurs. Update the wait and hold time appropriately. The behavior is undefined if the calling thread already owns the lock. | xref:BloombergLP/bslmt/MeteredMutex/unlock.adoc[`unlock`] | Release the lock on this mutex that was previously acquired through a successful call to `lock` or `tryLock`. Update the hold time appropriately. The behavior is undefined unless the calling thread currently owns the lock. | xref:BloombergLP/bslmt/MeteredMutex/waitTime.adoc[`waitTime`] | Return the wait time (in nanoseconds), accumulated since the most recent call to `resetMetrics` (or `MeteredMutex` if `resetMetrics` was never called). |=== [.small]#Created with https://www.mrdocs.com[MrDocs]#