diff --git a/src/backend/common/GpuWorker.h b/src/backend/common/GpuWorker.h index 3c828e528..462cf6fad 100644 --- a/src/backend/common/GpuWorker.h +++ b/src/backend/common/GpuWorker.h @@ -49,6 +49,8 @@ protected: std::atomic<uint32_t> m_index = {}; uint64_t m_hashCount[2] = {}; uint64_t m_timestamp[2] = {}; + + uint64_t m_count = 0; }; diff --git a/src/backend/common/Worker.h b/src/backend/common/Worker.h index 6a94a22ac..a1b697f0f 100644 --- a/src/backend/common/Worker.h +++ b/src/backend/common/Worker.h @@ -20,6 +20,9 @@ #define XMRIG_WORKER_H +#include <atomic> + + #include "backend/common/interfaces/IWorker.h" @@ -38,8 +41,6 @@ protected: inline size_t id() const override { return m_id; } inline uint32_t node() const { return m_node; } - uint64_t m_count = 0; - private: const int64_t m_affinity; const size_t m_id; diff --git a/src/backend/cpu/CpuWorker.cpp b/src/backend/cpu/CpuWorker.cpp index bef2e898e..6a4aa232c 100644 --- a/src/backend/cpu/CpuWorker.cpp +++ b/src/backend/cpu/CpuWorker.cpp @@ -232,8 +232,8 @@ bool xmrig::CpuWorker<N>::selfTest() template<size_t N> void xmrig::CpuWorker<N>::hashrateData(uint64_t &hashCount, uint64_t &, uint64_t &rawHashes) const { - hashCount = m_count; - rawHashes = m_count; + hashCount = m_count.load(std::memory_order_relaxed); + rawHashes = hashCount; } @@ -351,7 +351,8 @@ void xmrig::CpuWorker<N>::start() JobResults::submit(job, current_job_nonces[i], m_hash + (i * 32), job.hasMinerSignature() ? miner_signature_saved : nullptr); } } - m_count += N; + + m_count.fetch_add(N, std::memory_order_relaxed); } if (m_yield) { diff --git a/src/backend/cpu/CpuWorker.h b/src/backend/cpu/CpuWorker.h index 18e4fed5c..c08c90c40 100644 --- a/src/backend/cpu/CpuWorker.h +++ b/src/backend/cpu/CpuWorker.h @@ -107,6 +107,8 @@ private: # ifdef XMRIG_FEATURE_BENCHMARK uint32_t m_benchSize = 0; # endif + + std::atomic<uint64_t> m_count = {0}; };