FreeBSD Manual Pages
std::latch(3) C++ Standard Libary std::latch(3) NAME std::latch - std::latch Synopsis Defined in header <latch> class latch; (since C++20) The latch class is a downward counter of type std::ptrdiff_t which can be used to synchronize threads. The value of the counter is initialized on cre- ation. Threads may block on the latch until the counter is decremented to zero. There is no possibility to increase or reset the counter, which makes the latch a single-use barrier. Concurrent invocations of the member functions of std::latch, except for the destructor, do not introduce data races. Unlike std::barrier, std::latch can be decremented by a participat- ing thread more than once. Member functions constructor constructs a latch (public member function) destructor destroys the latch (public member function) operator= latch is not assignable [deleted] (public member function) count_down decrements the counter in a non-blocking manner (public member function) try_wait tests if the internal counter equals zero (public member function) wait blocks until the counter reaches zero (public member function) arrive_and_wait decrements the counter and blocks until it reaches zero (public member function) Constants max the maximum value of counter supported by the imple- mentation [static] (public static member function) Notes Feature-test macro Value Std Feature __cpp_lib_latch 201907L (C++20) std::latch Example // Run this code #include <functional> #include <iostream> #include <latch> #include <string> #include <thread> struct Job { const std::string name; std::string product{"not worked"}; std::thread action{}; }; int main() { Job jobs[]{{"Annika"}, {"Buru"}, {"Chuck"}}; std::latch work_done{std::size(jobs)}; std::latch start_clean_up{1}; auto work = [&](Job& my_job) { my_job.product = my_job.name + " worked"; work_done.count_down(); start_clean_up.wait(); my_job.product = my_job.name + " cleaned"; }; std::cout << "Work is starting... "; for (auto& job : jobs) job.action = std::thread{work, std::ref(job)}; work_done.wait(); std::cout << "done:\n"; for (auto const& job : jobs) std::cout << " " << job.product << '\n'; std::cout << "Workers are cleaning up... "; start_clean_up.count_down(); for (auto& job : jobs) job.action.join(); std::cout << "done:\n"; for (auto const& job : jobs) std::cout << " " << job.product << '\n'; } Output: Work is starting... done: Annika worked Buru worked Chuck worked Workers are cleaning up... done: Annika cleaned Buru cleaned Chuck cleaned See also barrier reusable thread barrier (C++20) (class template) http://cppreference.com 2024.06.10 std::latch(3)
NAME | Synopsis | Member functions | Constants | Notes | Example | Output: | See also
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::latch&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>
