SpinlockImpl#
Fully qualified name: carb::thread::detail::SpinlockImpl
Defined in carb/thread/Spinlock.h
-
template<class RecursionPolicy>
class 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 SpinlockImpl() = default#