[#BloombergLP-bsls-BslOnceGuard] = xref:BloombergLP.adoc[BloombergLP]::xref:BloombergLP/bsls.adoc[bsls]::BslOnceGuard :relfileprefix: ../../ :mrdocs: This class provides a guard for managing a `BslOnce` for the purpose of executing a block of code (only) once. == Synopsis Declared in `<bsls_bslonce.h>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- class BslOnceGuard; ---- == Member Functions [cols="1,4"] |=== | Name| Description | xref:BloombergLP/bsls/BslOnceGuard/2constructor.adoc[`BslOnceGuard`] [.small]#[constructor]# | Create a guard to manage a block of code that is executed once. | xref:BloombergLP/bsls/BslOnceGuard/2destructor.adoc[`~BslOnceGuard`] [.small]#[destructor]# | Destroy this guard, and if `enter` had been called on this object without a subsequent call to `leave`, then call `leave` to signal the completion of the one‐time block of code. | xref:BloombergLP/bsls/BslOnceGuard/enter.adoc[`enter`] | Enter the one‐time block of code that is managed by the specified `once`. Return `true` if the one‐time block of code has been entered, and `false` if the one‐time block of code has already been executed. If this function returns `false` then the thread of execution in which `enter` returned `true` has already called `leave` ‐‐ i.e., the one‐time block of code is guaranteed to have _completed_ execution. The behavior is undefined unless `once` was originally initialized to `BSLS_BSLONCE_INITIALIZER`. Note that a successful `enter` locks a spin‐lock; it is imperative that `leave` be called quickly. | xref:BloombergLP/bsls/BslOnceGuard/leave.adoc[`leave`] | Exit the one‐time block of code. The behavior is undefined unless the caller had previously called `enter`, and `enter` had returned `true`. |=== [.small]#Created with https://www.mrdocs.com[MrDocs]#