|
@@ -32,6 +32,7 @@ inline void TReaderWriterSpinLock::ReleaseReader() noexcept
|
|
|
{
|
|
|
auto prevValue = Value_.fetch_sub(ReaderDelta, std::memory_order::release);
|
|
|
Y_ASSERT((prevValue & ~WriterMask) != 0);
|
|
|
+ NDetail::RecordSpinLockReleased();
|
|
|
}
|
|
|
|
|
|
inline void TReaderWriterSpinLock::AcquireWriter() noexcept
|
|
@@ -46,6 +47,7 @@ inline void TReaderWriterSpinLock::ReleaseWriter() noexcept
|
|
|
{
|
|
|
auto prevValue = Value_.fetch_and(~WriterMask, std::memory_order::release);
|
|
|
Y_ASSERT(prevValue & WriterMask);
|
|
|
+ NDetail::RecordSpinLockReleased();
|
|
|
}
|
|
|
|
|
|
inline bool TReaderWriterSpinLock::IsLocked() const noexcept
|
|
@@ -70,6 +72,7 @@ inline bool TReaderWriterSpinLock::TryAcquireReader() noexcept
|
|
|
Value_.fetch_sub(ReaderDelta, std::memory_order::relaxed);
|
|
|
return false;
|
|
|
}
|
|
|
+ NDetail::RecordSpinLockAcquired();
|
|
|
return true;
|
|
|
}
|
|
|
|
|
@@ -89,13 +92,19 @@ inline bool TReaderWriterSpinLock::TryAcquireReaderForkFriendly() noexcept
|
|
|
return false;
|
|
|
}
|
|
|
auto newValue = oldValue + ReaderDelta;
|
|
|
- return Value_.compare_exchange_weak(oldValue, newValue, std::memory_order::acquire);
|
|
|
+
|
|
|
+ bool acquired = Value_.compare_exchange_weak(oldValue, newValue, std::memory_order::acquire);
|
|
|
+ NDetail::RecordSpinLockAcquired(acquired);
|
|
|
+ return acquired;
|
|
|
}
|
|
|
|
|
|
inline bool TReaderWriterSpinLock::TryAcquireWriter() noexcept
|
|
|
{
|
|
|
auto expected = UnlockedValue;
|
|
|
- return Value_.compare_exchange_weak(expected, WriterMask, std::memory_order::acquire);
|
|
|
+
|
|
|
+ bool acquired = Value_.compare_exchange_weak(expected, WriterMask, std::memory_order::acquire);
|
|
|
+ NDetail::RecordSpinLockAcquired(acquired);
|
|
|
+ return acquired;
|
|
|
}
|
|
|
|
|
|
inline bool TReaderWriterSpinLock::TryAndTryAcquireWriter() noexcept
|