21 namespace seqan3::detail
47 latch(latch
const &) =
delete;
48 latch(latch &&) =
delete;
49 latch & operator=(latch
const &) =
delete;
50 latch & operator=(latch &&) =
delete;
56 while (num_waiting.load(std::memory_order_acquire) > 0)
63 explicit latch(ptrdiff_t
const expected) :
66 assert(expected >= 0);
67 num_waiting.store(0, std::memory_order_relaxed);
87 void arrive(ptrdiff_t n = 1) noexcept
89 assert(counter.load(std::memory_order_acquire) >= n);
90 assert(counter.load(std::memory_order_acquire) >= 0);
92 counter.fetch_sub(n, std::memory_order_acq_rel);
112 void arrive_and_wait(ptrdiff_t n = 1) noexcept
130 bool try_wait() const noexcept
132 return counter.load(std::memory_order_acquire) == 0;
154 while (counter.load(std::memory_order_acquire) > 0)