[#BloombergLP-bsls-SpinLock] = xref:BloombergLP.adoc[BloombergLP]::xref:BloombergLP/bsls.adoc[bsls]::SpinLock :relfileprefix: ../../ :mrdocs: Statically‐initializable mutex that spins instead of blocking. == Synopsis Declared in `<bsls_spinlock.h>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- struct SpinLock; ---- == Description A statically‐initializable synchronization primitive that "spins" (i.e., executes user instructions in a tight loop) rather than blocking waiting threads using system calls. The following idiom is used to initialize `SpinLock` variables: ` SpinLock lock = BSLS_SPINLOCK_UNLOCKED; ` A class member `d_lock` of type `SpinLock` may be initialized using the following idiom: ` , d_lock(SpinLock::s_unlocked) ` == Member Functions [cols="1,4"] |=== | Name| Description | xref:BloombergLP/bsls/SpinLock/2constructor-01.adoc[`SpinLock`] [.small]#[constructor]# | Constructors | xref:BloombergLP/bsls/SpinLock/lock.adoc[`lock`] | Spin (repeat a loop continuously without using the system to pause or reschedule the thread) until this object is unlocked, then atomically acquire the lock. | xref:BloombergLP/bsls/SpinLock/lockWithBackoff.adoc[`lockWithBackoff`] | Acquire the lock, spinning with backoff until it is free. | xref:BloombergLP/bsls/SpinLock/lockWithoutBackoff.adoc[`lockWithoutBackoff`] | Acquire the lock by spinning without backoff until it is free. | xref:BloombergLP/bsls/SpinLock/tryLock.adoc[`tryLock`] | Attempt to acquire the lock, retrying up to `numRetries` times. | xref:BloombergLP/bsls/SpinLock/unlock.adoc[`unlock`] | Release the lock. The behavior is undefined unless the current thread holds the lock. |=== == Static Data Members [cols="1,4"] |=== | Name| Description | xref:BloombergLP/bsls/SpinLock/s_unlocked.adoc[`s_unlocked`] | Initializer for an unlocked spin lock. |=== [.small]#Created with https://www.mrdocs.com[MrDocs]#