[#BloombergLP-bslmt-ReadLockGuardUnlock-2constructor-0e] = xref:BloombergLP.adoc[BloombergLP]::xref:BloombergLP/bslmt.adoc[bslmt]::xref:BloombergLP/bslmt/ReadLockGuardUnlock.adoc[ReadLockGuardUnlock]::ReadLockGuardUnlock :relfileprefix: ../../../ :mrdocs: Constructors == Synopses Declared in `<bslmt_readlockguard.h>` Create a scoped guard that conditionally manages the specified `lock` (if non‐null) and invokes `lock‐>unlock()`. Supplying a null `lock` has no effect. The behavior is undefined unless `lock` (if non‐null) is locked by this thread. Note that `lock` must remain valid throughout the lifetime of this guard, or until `release` is called. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- explicit xref:BloombergLP/bslmt/ReadLockGuardUnlock/2constructor-09.adoc[ReadLockGuardUnlock](T* lock); ---- [.small]#xref:BloombergLP/bslmt/ReadLockGuardUnlock/2constructor-09.adoc[_» more..._]# Create a scoped guard that conditionally manages the specified `lock` (if non‐null) and invokes `lock‐>unlock()` if the specified `alreadyUnlockedFlag` is `false`. Supplying a null `lock` has no effect. The behavior is undefined unless the state of `lock` (if non‐null) is consistent with `alreadyUnlockedFlag`. Note that `alreadyUnlockedFlag` is used to indicate whether `lock` is in an already‐unlocked state when passed, so if `alreadyUnlockedFlag` is `true` the `unlock` method will _not_ be called on the supplied `lock`. Also note that `lock` must remain valid throughout the lifetime of this guard, or until `release` is called. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- xref:BloombergLP/bslmt/ReadLockGuardUnlock/2constructor-0a.adoc[ReadLockGuardUnlock]( T* lock, bool alreadyUnlockedFlag); ---- [.small]#xref:BloombergLP/bslmt/ReadLockGuardUnlock/2constructor-0a.adoc[_» more..._]# [.small]#Created with https://www.mrdocs.com[MrDocs]#