From 4d15203b9493647776c230048eadb665dc0da39d Mon Sep 17 00:00:00 2001 From: Nishant Kumar Singh Date: Thu, 23 May 2019 12:02:37 +0530 Subject: [PATCH] Minor rework of SpinLock class for making it more efficient on Unlock() (#33) * Minor rework of SpinLock class for making it more efficient on Unlock() * remove tabs in Concurrent.h class --- .gitignore | 1 + AnnService/inc/Helper/Concurrent.h | 23 ++++++++++++++-------- AnnService/src/Helper/Concurrent.cpp | 29 ---------------------------- 3 files changed, 16 insertions(+), 37 deletions(-) diff --git a/.gitignore b/.gitignore index f87ba727..97378583 100644 --- a/.gitignore +++ b/.gitignore @@ -88,3 +88,4 @@ dkms.conf /Wrappers/inc/AnnIndex.java /Wrappers/inc/AnnClient.java /AnnService.users - Copy.props +/.vs diff --git a/AnnService/inc/Helper/Concurrent.h b/AnnService/inc/Helper/Concurrent.h index 41c9c5ff..20ed6b5d 100644 --- a/AnnService/inc/Helper/Concurrent.h +++ b/AnnService/inc/Helper/Concurrent.h @@ -4,12 +4,11 @@ #ifndef _SPTAG_HELPER_CONCURRENT_H_ #define _SPTAG_HELPER_CONCURRENT_H_ -#include -#include + #include #include #include -#include + namespace SPTAG { @@ -21,17 +20,25 @@ namespace Concurrent class SpinLock { public: - SpinLock(); - ~SpinLock(); + SpinLock() = default; + + void Lock() noexcept + { + while (m_lock.test_and_set(std::memory_order_acquire)) + { + } + } - void Lock(); - void Unlock(); + void Unlock() noexcept + { + m_lock.clear(std::memory_order_release); + } SpinLock(const SpinLock&) = delete; SpinLock& operator = (const SpinLock&) = delete; private: - std::atomic_flag m_lock; + std::atomic_flag m_lock = ATOMIC_FLAG_INIT; }; diff --git a/AnnService/src/Helper/Concurrent.cpp b/AnnService/src/Helper/Concurrent.cpp index 36988cb4..cbb1bdb6 100644 --- a/AnnService/src/Helper/Concurrent.cpp +++ b/AnnService/src/Helper/Concurrent.cpp @@ -6,35 +6,6 @@ using namespace SPTAG; using namespace SPTAG::Helper::Concurrent; - -SpinLock::SpinLock() - : m_lock() -{ - m_lock.clear(); -} - - -SpinLock::~SpinLock() -{ -} - - -void -SpinLock::Lock() -{ - while (m_lock.test_and_set(std::memory_order_acquire)) - { - } -} - - -void -SpinLock::Unlock() -{ - m_lock.clear(); -} - - WaitSignal::WaitSignal() : m_isWaiting(false), m_unfinished(0)