From ad6ffaac05cd337b9b54aefb07f5e4a435c578f8 Mon Sep 17 00:00:00 2001 From: Joachim Schoeberl Date: Thu, 30 Mar 2023 12:26:58 +0200 Subject: [PATCH] shared loop with relaxed memory ordering --- libsrc/core/taskmanager.hpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/libsrc/core/taskmanager.hpp b/libsrc/core/taskmanager.hpp index dc808220..53cf21b4 100644 --- a/libsrc/core/taskmanager.hpp +++ b/libsrc/core/taskmanager.hpp @@ -462,22 +462,26 @@ public: // return IntRange(begin, end); // } - bool PopFirst (size_t & first) + bool PopFirst (size_t & hfirst) { // first = begin++; // return first < end; - first = begin; + size_t first = begin.load(std::memory_order_relaxed); size_t nextfirst = first+1; if (first >= end) nextfirst = std::numeric_limits::max()-1; - while (!begin.compare_exchange_weak (first, nextfirst)) + // while (!begin.compare_exchange_weak (first, nextfirst)) + while (!begin.compare_exchange_weak (first, nextfirst, + std::memory_order_relaxed, + std::memory_order_relaxed)) { first = begin; nextfirst = first+1; if (nextfirst >= end) nextfirst = std::numeric_limits::max()-1; } + hfirst = first; return first < end; }