16#include <condition_variable>
45 explicit latch(std::ptrdiff_t count)
53 std::unique_lock<std::mutex> lock(
mutex_);
65 std::unique_lock<std::mutex> lock(
mutex_);
73 std::unique_lock<std::mutex> lock(
mutex_);
74 cv_.wait(lock, [
this] {
return count_ <= 0; });
88 mutable std::condition_variable
cv_;
100 template<
typename CompletionFunction = std::function<
void()>>
109 CompletionFunction completion = [](){})
124 std::unique_lock<std::mutex> lock(
mutex_);
133 if constexpr (!std::is_same_v<CompletionFunction, std::function<void()>>) {
153 std::unique_lock<std::mutex> lock(
mutex_);
160 mutable std::condition_variable
cv_;
C++17-compatible barrier implementation.
void arrive_and_drop()
Decrements the counter without blocking.
barrier(std::ptrdiff_t count, CompletionFunction completion=[](){})
Constructs a barrier for the given number of threads.
void arrive_and_wait()
Arrives at the barrier and blocks until all threads arrive.
std::ptrdiff_t threshold_
std::condition_variable cv_
CompletionFunction completion_
C++17-compatible latch implementation.
void count_down(std::ptrdiff_t n=1)
Decrements the counter in a non-blocking manner.
void wait() const
Blocks until the counter reaches zero.
latch(std::ptrdiff_t count)
Constructs a latch with the given count.
bool try_wait() const noexcept
Tests if the internal counter equals zero.
void arrive_and_wait(std::ptrdiff_t n=1)
Decrements the counter and blocks until it reaches zero.
std::condition_variable cv_
Core threading foundation of the thread system library.