From a24ed54cf5dec89b301560efae62fab371298293 Mon Sep 17 00:00:00 2001 From: Takashi Sawanaka Date: Tue, 11 Jun 2019 22:55:11 +0900 Subject: [PATCH] CompareStats.*: Use std::atomic instead of Poco::AtomicCounter --- Src/CompareStats.cpp | 14 +++++--------- Src/CompareStats.h | 14 ++++++-------- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/Src/CompareStats.cpp b/Src/CompareStats.cpp index 173dd58c7..300b629f7 100644 --- a/Src/CompareStats.cpp +++ b/Src/CompareStats.cpp @@ -8,11 +8,9 @@ #include "CompareStats.h" #include #include -#include +#include #include "DiffItem.h" -using Poco::FastMutex; - /** * @brief Constructor, initializes critical section. */ @@ -39,7 +37,6 @@ CompareStats::~CompareStats() */ void CompareStats::IncreaseTotalItems(int count /*= 1*/) { - FastMutex::ScopedLock lock(m_csProtect); m_nTotalItems += count; } @@ -49,7 +46,6 @@ void CompareStats::IncreaseTotalItems(int count /*= 1*/) */ void CompareStats::AddItem(int code) { - FastMutex::ScopedLock lock(m_csProtect); if (code != -1) { RESULT res = GetResultFromCode(code); @@ -207,8 +203,8 @@ CompareStats::RESULT CompareStats::GetResultFromCode(unsigned diffcode) const void CompareStats::Swap(int idx1, int idx2) { idx2 = m_nDirs < 3 ? idx2 + 1 : idx2; - std::swap(m_counts[RESULT_LUNIQUE + idx1], m_counts[RESULT_LUNIQUE + idx2]); - std::swap(m_counts[RESULT_LMISSING + idx1], m_counts[RESULT_LMISSING + idx2]); - std::swap(m_counts[RESULT_LDIRUNIQUE + idx1], m_counts[RESULT_LDIRUNIQUE + idx2]); - std::swap(m_counts[RESULT_LDIRMISSING + idx1], m_counts[RESULT_LDIRMISSING + idx2]); + m_counts[RESULT_LUNIQUE + idx2] = m_counts[RESULT_LUNIQUE + idx1].exchange(m_counts[RESULT_LUNIQUE + idx2]); + m_counts[RESULT_LMISSING + idx2] = m_counts[RESULT_LMISSING + idx1].exchange(m_counts[RESULT_LMISSING + idx2]); + m_counts[RESULT_LDIRUNIQUE + idx2] = m_counts[RESULT_LDIRUNIQUE + idx1].exchange(m_counts[RESULT_LDIRUNIQUE + idx2]); + m_counts[RESULT_LDIRMISSING + idx2] = m_counts[RESULT_LDIRMISSING + idx1].exchange(m_counts[RESULT_LDIRMISSING + idx2]); } diff --git a/Src/CompareStats.h b/Src/CompareStats.h index 381d3ad83..d219b3ffd 100644 --- a/Src/CompareStats.h +++ b/Src/CompareStats.h @@ -5,9 +5,7 @@ */ #pragma once -#define POCO_NO_UNWINDOWS 1 -#include -#include +#include #include #include @@ -95,17 +93,17 @@ public: int GetCompareDirs() const { return m_nDirs; } private: - std::array m_counts; /**< Table storing result counts */ - mutable Poco::FastMutex m_csProtect; /**< For synchronizing read/write of counts */ - long m_nTotalItems; /**< Total items found to compare */ - long m_nComparedItems; /**< Compared items so far */ + std::array m_counts; /**< Table storing result counts */ + std::atomic_int m_nTotalItems; /**< Total items found to compare */ + std::atomic_int m_nComparedItems; /**< Compared items so far */ CMP_STATE m_state; /**< State for compare (idle, collect, compare,..) */ bool m_bCompareDone; /**< Have we finished last compare? */ int m_nDirs; /**< number of directories to compare */ struct ThreadState { ThreadState() : m_nHitCount(0), m_pDiffItem(nullptr) {} - Poco::AtomicCounter m_nHitCount; + ThreadState(const ThreadState& other) : m_nHitCount(other.m_nHitCount.load()), m_pDiffItem(other.m_pDiffItem) {} + std::atomic_int m_nHitCount; const DIFFITEM *m_pDiffItem; }; std::vector m_rgThreadState; -- 2.11.0