class SK_CAPABILITY("mutex") SkSpinlock { public:
constexpr SkSpinlock() = default;
void acquire() SK_ACQUIRE() { // To act as a mutex, we need an acquire barrier when we acquire the lock. if (fLocked.exchange(true, std::memory_order_acquire)) { // Lock was contended. Fall back to an out-of-line spin loop.
this->contendedAcquire();
}
}
// Acquire the lock or fail (quickly). Lets the caller decide to do something other than wait. bool tryAcquire() SK_TRY_ACQUIRE(true) { // To act as a mutex, we need an acquire barrier when we acquire the lock. if (fLocked.exchange(true, std::memory_order_acquire)) { // Lock was contended. Let the caller decide what to do. returnfalse;
} returntrue;
}
void release() SK_RELEASE_CAPABILITY() { // To act as a mutex, we need a release barrier when we release the lock.
fLocked.store(false, std::memory_order_release);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.