diff --git a/src/utility/spinlock.hpp b/src/utility/spinlock.hpp index 3a6efdcc..855e9c2e 100644 --- a/src/utility/spinlock.hpp +++ b/src/utility/spinlock.hpp @@ -5,7 +5,7 @@ #include "utility.hpp" #include -#include +#include namespace gapp::detail { @@ -16,9 +16,12 @@ namespace gapp::detail { while (true) { + if (!locked_.test_and_set(std::memory_order_relaxed)) + { + std::ignore = locked_.test(std::memory_order_acquire); + break; + } while (locked_.test(std::memory_order_relaxed)) GAPP_PAUSE(); - if (!locked_.test_and_set(std::memory_order_acquire)) break; - std::this_thread::yield(); } }