carb::thread::details::SpinlockImpl¶
Defined in carb/thread/Spinlock.h
-
template<class
RecursionPolicy
>
classcarb::thread::details
::
SpinlockImpl
¶ Spinlock and RecursiveSpinlock are locking primitives that never enter the kernel to wait.
This class meets Cpp17BasicLockable and Cpp17Lockable named requirements.
Note
Do not use SpinlockImpl directly; instead use Spinlock or RecursiveSpinlock.
Warning
Using Spinlock is generally discouraged and can lead to worse performance than using carb::thread::mutex or another synchronization primitive that can wait.
Public Functions
-
constexpr
SpinlockImpl
() = default¶ Constructor.
-
~SpinlockImpl
() = default¶ Destructor.
-
inline void
lock
()¶ Locks the spinlock, spinning the current thread until it becomes available.
If not called from RecursiveSpinlock and the calling thread already owns the lock,
std::terminate()
is called. The calling thread must call unlock() at a later time to release the lock.
-
inline void
unlock
()¶ Unlocks the spinlock.
Warning
std::terminate()
is called if the calling thread does not own the spinlock.
-
inline bool
try_lock
()¶ Attempts to immediately lock the spinlock.
If not called from RecursiveSpinlock and the calling thread already owns the lock,
std::terminate()
is called.- Returns
true
if the spinlock was available and the lock was taken by the calling thread (unlock() must be called from the calling thread at a later time to release the lock);false
if the spinlock could not be locked by the calling thread.
-
inline bool
isLockedByThisThread
() const¶ Returns true if the calling thread owns this spinlock.
- Returns
true
if the calling thread owns this spinlock;false
otherwise.
-
constexpr