From b50e50b5fbdeaa3990984a6bda052bbb92c234a9 Mon Sep 17 00:00:00 2001 From: Stephen Seo Date: Sat, 22 Jul 2023 16:45:52 +0900 Subject: [PATCH] Replace unnecessary use of atomic in "shared_lock" --- src/CXX11_shared_spin_lock.cpp | 16 ++++++++-------- src/CXX11_shared_spin_lock.hpp | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/CXX11_shared_spin_lock.cpp b/src/CXX11_shared_spin_lock.cpp index 1c0ab84..44acd06 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.load()) { + if (!write) { ++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.load()) { + if (!write) { ++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.load() > 0) { + if (read > 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.load() && read.load() == 0) { - write.store(true); + if (!write && read == 0) { + write = 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.load() && read.load() == 0) { - write.store(true); + if (!write && read == 0) { + write = 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.store(false); + write = false; badge.isValid = false; } } diff --git a/src/CXX11_shared_spin_lock.hpp b/src/CXX11_shared_spin_lock.hpp index 8b524ed..4fab36a 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; - std::atomic_uint read; - std::atomic_bool write; + unsigned int read; + bool write; };