Quick Links: |
#include <bsls_bslonce.h>
Public Member Functions | |
BslOnceGuard () | |
~BslOnceGuard () | |
bool | enter (BslOnce *once) |
void | leave () |
This class provides a guard for managing a BslOnce
for the purpose of executing a block of code (only) once.
bsls::BslOnceGuard::BslOnceGuard | ( | ) |
Create a guard to manage a block of code that is executed once.
bsls::BslOnceGuard::~BslOnceGuard | ( | ) |
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.
bool bsls::BslOnceGuard::enter | ( | BslOnce * | once | ) |
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.
Referenced by bsls::NameOf< TYPE >::NameOf().
void bsls::BslOnceGuard::leave | ( | ) |
Exit the one-time block of code. The behavior is undefined unless the caller had previously called enter
, and enter
had returned true
.