26 #ifndef NO_MULTI_THREADING
34 unsigned int m_threads;
36 std::atomic<unsigned int> m_waiters;
37 std::atomic<unsigned int> m_leavers;
40 barrier(
unsigned int threads) : m_threads(threads), m_waiters(0), m_leavers(0) { }
50 while (m_waiters != m_threads) {
54 unsigned int v = m_leavers.fetch_add(1);
56 if (v == (m_threads - 1)) {
57 m_waiters -= m_threads;
60 while (m_leavers > 0) {