[#BloombergLP-bsls-BslOnce] = xref:BloombergLP.adoc[BloombergLP]::xref:BloombergLP/bsls.adoc[bsls]::BslOnce :relfileprefix: ../../ :mrdocs: This `struct` provides a simple data type for ensuring a block of code is executed (only) once. Note that this is defined as a `struct` to allow constant initialization in a global or static context using `BSLS_BSLONCE_INITIALIZER`. == Synopsis Declared in `<bsls_bslonce.h>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct BslOnce; ---- == Member Functions [cols="1,4"] |=== | Name| Description | xref:BloombergLP/bsls/BslOnce/enter.adoc[`enter`] | Enter the one‐time block of code. 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 this object 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/BslOnce/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`. |=== == Data Members [cols="1,4"] |=== | Name| Description | xref:BloombergLP/bsls/BslOnce/d_onceState.adoc[`d_onceState`] | State of the one‐time block of code managed by this object. |=== [.small]#Created with https://www.mrdocs.com[MrDocs]#