From: Stephen Seo Date: Sat, 22 Jul 2023 08:28:13 +0000 (+0900) Subject: Revert "Replace unnecessary use of atomic in "shared_lock"" X-Git-Tag: 1.0~32 X-Git-Url: https://git.seodisparate.com/stephenseo/img/favicon.ico?a=commitdiff_plain;h=ce092f81f9acd14752852a8148183cf3fde1d899;p=UDPConnection Revert "Replace unnecessary use of atomic in "shared_lock"" This reverts commit b50e50b5fbdeaa3990984a6bda052bbb92c234a9. --- diff --git a/src/CXX11_shared_spin_lock.cpp b/src/CXX11_shared_spin_lock.cpp index 44acd06..1c0ab84 100644 --- a/src/CXX11_shared_spin_lock.cpp +++ b/src/CXX11_shared_spin_lock.cpp @@ -20,7 +20,7 @@ write(false) UDPC::LockObj UDPC::SharedSpinLock::spin_read_lock() { while (true) { std::lock_guard lock(mutex); - if (!write) { + if (!write.load()) { ++read; return LockObj(selfWeakPtr, Badge{}); } @@ -29,7 +29,7 @@ UDPC::LockObj UDPC::SharedSpinLock::spin_read_lock() { UDPC::LockObj UDPC::SharedSpinLock::try_spin_read_lock() { std::lock_guard lock(mutex); - if (!write) { + if (!write.load()) { ++read; return LockObj(selfWeakPtr, Badge{}); } @@ -39,7 +39,7 @@ UDPC::LockObj UDPC::SharedSpinLock::try_spin_read_lock() { void UDPC::SharedSpinLock::read_unlock(UDPC::Badge &&badge) { if (badge.isValid) { std::lock_guard lock(mutex); - if (read > 0) { + if (read.load() > 0) { --read; badge.isValid = false; } @@ -49,8 +49,8 @@ void UDPC::SharedSpinLock::read_unlock(UDPC::Badge &&badge) { UDPC::LockObj UDPC::SharedSpinLock::spin_write_lock() { while (true) { std::lock_guard lock(mutex); - if (!write && read == 0) { - write = true; + if (!write.load() && read.load() == 0) { + write.store(true); return LockObj(selfWeakPtr, Badge{}); } } @@ -58,8 +58,8 @@ UDPC::LockObj UDPC::SharedSpinLock::spin_write_lock() { UDPC::LockObj UDPC::SharedSpinLock::try_spin_write_lock() { std::lock_guard lock(mutex); - if (!write && read == 0) { - write = true; + if (!write.load() && read.load() == 0) { + write.store(true); return LockObj(selfWeakPtr, Badge{}); } return LockObj(Badge{}); @@ -68,7 +68,7 @@ UDPC::LockObj UDPC::SharedSpinLock::try_spin_write_lock() { void UDPC::SharedSpinLock::write_unlock(UDPC::Badge &&badge) { if (badge.isValid) { std::lock_guard lock(mutex); - write = false; + write.store(false); badge.isValid = false; } } diff --git a/src/CXX11_shared_spin_lock.hpp b/src/CXX11_shared_spin_lock.hpp index 4fab36a..8b524ed 100644 --- a/src/CXX11_shared_spin_lock.hpp +++ b/src/CXX11_shared_spin_lock.hpp @@ -84,8 +84,8 @@ private: Weak selfWeakPtr; std::mutex mutex; - unsigned int read; - bool write; + std::atomic_uint read; + std::atomic_bool write; };