rw_spin_lock.cpp 861 B

123456789101112131415161718192021222324252627282930313233
  1. #include "rw_spin_lock.h"
  2. namespace NYT::NThreading {
  3. ////////////////////////////////////////////////////////////////////////////////
  4. void TReaderWriterSpinLock::AcquireReaderSlow() noexcept
  5. {
  6. TSpinWait spinWait(Location_, ESpinLockActivityKind::Read);
  7. while (!TryAndTryAcquireReader()) {
  8. spinWait.Wait();
  9. }
  10. }
  11. void TReaderWriterSpinLock::AcquireReaderForkFriendlySlow() noexcept
  12. {
  13. TSpinWait spinWait(Location_, ESpinLockActivityKind::Read);
  14. while (!TryAcquireReaderForkFriendly()) {
  15. spinWait.Wait();
  16. }
  17. }
  18. void TReaderWriterSpinLock::AcquireWriterSlow() noexcept
  19. {
  20. TSpinWait spinWait(Location_, ESpinLockActivityKind::Write);
  21. while (!TryAndTryAcquireWriter()) {
  22. spinWait.Wait();
  23. }
  24. }
  25. ////////////////////////////////////////////////////////////////////////////////
  26. } // namespace NYT::NThreading