From e48a7741accba613bcb0e5e395595ce59a7f2959 Mon Sep 17 00:00:00 2001 From: Aidan Dang Date: Thu, 20 Nov 2025 12:48:44 +0800 Subject: [PATCH] Only use acq ordering for MicroSpinLock locking --- folly/synchronization/MicroSpinLock.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/folly/synchronization/MicroSpinLock.h b/folly/synchronization/MicroSpinLock.h index c0465fcd423..d89ff69af3b 100644 --- a/folly/synchronization/MicroSpinLock.h +++ b/folly/synchronization/MicroSpinLock.h @@ -68,7 +68,7 @@ struct MicroSpinLock { void init() noexcept { payload()->store(FREE); } bool try_lock() noexcept { - bool ret = xchg(LOCKED) == FREE; + bool ret = xchg_acq(LOCKED) == FREE; annotate_rwlock_try_acquired( this, annotate_rwlock_level::wrlock, ret, __FILE__, __LINE__); return ret; @@ -76,7 +76,7 @@ struct MicroSpinLock { void lock() noexcept { detail::Sleeper sleeper; - while (xchg(LOCKED) != FREE) { + while (xchg_acq(LOCKED) != FREE) { do { sleeper.wait(); } while (payload()->load(std::memory_order_relaxed) == LOCKED); @@ -98,9 +98,9 @@ struct MicroSpinLock { return reinterpret_cast*>(&this->lock_); } - uint8_t xchg(uint8_t newVal) noexcept { + uint8_t xchg_acq(uint8_t newVal) noexcept { return std::atomic_exchange_explicit( - payload(), newVal, std::memory_order_acq_rel); + payload(), newVal, std::memory_order_acquire); } }; static_assert(