Comment Comment by gavinlilly If contention is expected, would it be better to first perform a relaxed read before the exchange? For example: auto lock() noexcept -> void { auto backoff = 1; do { while (locked_.load(std::memory_order_relaxed)) { for (auto i = 0; i < backoff; ++i) _mm_pause(); backoff = backoff < 64 ? backoff << 1 : 64; } } while (locked_.exchange(true, std::memory_order_acquire); } parent gavinlilly 1 month ago