21namespace seqan3::detail
46 latch(latch
const &) =
delete;
47 latch(latch &&) =
delete;
48 latch & operator=(latch
const &) =
delete;
49 latch & operator=(latch &&) =
delete;
55 while (num_waiting.load(std::memory_order_acquire) > 0)
62 explicit latch(ptrdiff_t
const expected) : counter{expected}
64 assert(expected >= 0);
65 num_waiting.store(0, std::memory_order_relaxed);
85 void arrive(ptrdiff_t n = 1) noexcept
87 assert(counter.load(std::memory_order_acquire) >= n);
88 assert(counter.load(std::memory_order_acquire) >= 0);
90 counter.fetch_sub(n, std::memory_order_acq_rel);
110 void arrive_and_wait(ptrdiff_t n = 1) noexcept
128 bool try_wait() const noexcept
130 return counter.load(std::memory_order_acquire) == 0;
152 while (counter.load(std::memory_order_acquire) > 0)
constexpr std::size_t hardware_destructive_interference_size
Minimum offset between two objects to avoid false sharing.
Definition: new:34
The <new> header from C++17's standard library.
Provides seqan3::detail::spin_delay.