| 96 | using TSpinLockBase::TSpinLockBase; |
| 97 | |
| 98 | void Acquire() noexcept { |
| 99 | intptr_t zero = 0; |
| 100 | if (Val_.compare_exchange_strong(zero, 1)) { |
| 101 | return; |
| 102 | } |
| 103 | |
| 104 | TSpinWait sw; |
| 105 | |
| 106 | for (;;) { |
| 107 | zero = 0; |
| 108 | if (Val_.load(std::memory_order_acquire) == 0 && |
| 109 | Val_.compare_exchange_strong(zero, 1)) { |
| 110 | break; |
| 111 | } |
| 112 | sw.Sleep(); |
| 113 | } |
| 114 | } |
| 115 | |
| 116 | inline void lock() noexcept { |
| 117 | Acquire(); |
nothing calls this directly
no test coverage detected