spin_lock_count.cpp 831 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #include "spin_lock_count.h"
  2. #include <library/cpp/yt/assert/assert.h>
  3. #include <library/cpp/yt/misc/tls.h>
  4. #include <util/system/types.h>
  5. namespace NYT::NThreading::NPrivate {
  6. #ifndef NDEBUG
  7. ////////////////////////////////////////////////////////////////////////////////
  8. YT_THREAD_LOCAL(i64) ActiveSpinLockCount = 0;
  9. ////////////////////////////////////////////////////////////////////////////////
  10. void RecordSpinLockAcquired(bool isAcquired)
  11. {
  12. if (isAcquired) {
  13. ActiveSpinLockCount++;
  14. }
  15. }
  16. void RecordSpinLockReleased()
  17. {
  18. YT_VERIFY(ActiveSpinLockCount > 0);
  19. ActiveSpinLockCount--;
  20. }
  21. void VerifyNoSpinLockAffinity()
  22. {
  23. YT_VERIFY(ActiveSpinLockCount == 0);
  24. }
  25. #endif
  26. ////////////////////////////////////////////////////////////////////////////////
  27. } // namespace NYT::NThreading::NPrivate