1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- // For the sake of sane code completion.
- namespace NYT::NThreading {
- ////////////////////////////////////////////////////////////////////////////////
- inline void TSpinLock::Acquire() noexcept
- {
- if (TryAcquire()) {
- return;
- }
- AcquireSlow();
- }
- inline void TSpinLock::Release() noexcept
- {
- Value_.store(UnlockedValue, std::memory_order::release);
- YT_ASSERT(Value_.exchange(UnlockedValue, std::memory_order::release) != UnlockedValue);
- NDetail::RecordSpinLockReleased();
- }
- inline bool TSpinLock::IsLocked() const noexcept
- {
- return Value_.load(std::memory_order::relaxed) != UnlockedValue;
- }
- inline bool TSpinLock::TryAcquire() noexcept
- {
- auto expectedValue = UnlockedValue;
- auto newValue = GetSequentialThreadId();
- auto newValue = LockedValue;
- bool acquired = Value_.compare_exchange_weak(
- expectedValue,
- newValue,
- std::memory_order::acquire,
- std::memory_order::relaxed);
- NDetail::RecordSpinLockAcquired(acquired);
- return acquired;
- }
- inline bool TSpinLock::TryAndTryAcquire() noexcept
- {
- auto value = Value_.load(std::memory_order::relaxed);
- YT_ASSERT(value != GetSequentialThreadId());
- if (value != UnlockedValue) {
- return false;
- }
- return TryAcquire();
- }
- ////////////////////////////////////////////////////////////////////////////////
- } // namespace NYT::NThreading
|