130 TIdx
const generationWhenEnteredTheWait = m_generation;
131 std::unique_lock<std::mutex> lock(m_mtxBarrier);
133 auto const generationMod2 = m_generation %
static_cast<TIdx
>(2u);
134 if(m_curThreadCount == m_threadCount)
136 m_result[generationMod2] = TOp::InitialValue;
139 std::atomic<int>& result(m_result[generationMod2]);
140 bool const predicateBool(predicate != 0);
144 if(--m_curThreadCount == 0)
146 m_curThreadCount = m_threadCount;
148 m_cvAllThreadsReachedBarrier.notify_all();
152 m_cvAllThreadsReachedBarrier.wait(
154 [
this, generationWhenEnteredTheWait] {
return generationWhenEnteredTheWait != m_generation; });
156 return m_result[generationMod2];