- C 标准库
- C 标准库
- C++ 标准库
- C++ 库 - 首页
- C++ 库 - <fstream>
- C++ 库 - <iomanip>
- C++ 库 - <ios>
- C++ 库 - <iosfwd>
- C++ 库 - <iostream>
- C++ 库 - <istream>
- C++ 库 - <ostream>
- C++ 库 - <sstream>
- C++ 库 - <streambuf>
- C++ 库 - <atomic>
- C++ 库 - <complex>
- C++ 库 - <exception>
- C++ 库 - <functional>
- C++ 库 - <limits>
- C++ 库 - <locale>
- C++ 库 - <memory>
- C++ 库 - <new>
- C++ 库 - <numeric>
- C++ 库 - <regex>
- C++ 库 - <stdexcept>
- C++ 库 - <string>
- C++ 库 - <thread>
- C++ 库 - <tuple>
- C++ 库 - <typeinfo>
- C++ 库 - <utility>
- C++ 库 - <valarray>
- C++ STL 库
- C++ 库 - <array>
- C++ 库 - <bitset>
- C++ 库 - <deque>
- C++ 库 - <forward_list>
- C++ 库 - <list>
- C++ 库 - <map>
- C++ 库 - <multimap>
- C++ 库 - <queue>
- C++ 库 - <priority_queue>
- C++ 库 - <set>
- C++ 库 - <stack>
- C++ 库 - <unordered_map>
- C++ 库 - <unordered_set>
- C++ 库 - <vector>
- C++ 库 - <algorithm>
- C++ 库 - <iterator>
- C++ 高级库
- C++ 库 - <any>
- C++ 库 - <barrier>
- C++ 库 - <bit>
- C++ 库 - <chrono>
- C++ 库 - <cinttypes>
- C++ 库 - <clocale>
- C++ 库 - <condition_variable>
- C++ 库 - <coroutine>
- C++ 库 - <cstdlib>
- C++ 库 - <cstring>
- C++ 库 - <cuchar>
- C++ 库 - <charconv>
- C++ 库 - <cfenv>
- C++ 库 - <cmath>
- C++ 库 - <ccomplex>
- C++ 库 - <expected>
- C++ 库 - <format>
- C++ 库 - <future>
- C++ 库 - <flat_set>
- C++ 库 - <flat_map>
- C++ 库 - <filesystem>
- C++ 库 - <generator>
- C++ 库 - <initializer_list>
- C++ 库 - <latch>
- C++ 库 - <memory_resource>
- C++ 库 - <mutex>
- C++ 库 - <mdspan>
- C++ 库 - <optional>
- C++ 库 - <print>
- C++ 库 - <ratio>
- C++ 库 - <scoped_allocator>
- C++ 库 - <semaphore>
- C++ 库 - <source_location>
- C++ 库 - <span>
- C++ 库 - <spanstream>
- C++ 库 - <stacktrace>
- C++ 库 - <stop_token>
- C++ 库 - <syncstream>
- C++ 库 - <system_error>
- C++ 库 - <string_view>
- C++ 库 - <stdatomic>
- C++ 库 - <variant>
- C++ STL 库速查表
- C++ STL - 速查表
C++ 库 - <latch>
C++20 中的<latch> 头文件是一个一次性使用的同步原语,它确保一组线程等待直到满足预定义的条件。一旦满足此条件,所有等待的线程都将被处理。与 barrier 不同,latch 使用后不会重置。
<latch> 使用给定的计数进行构造,每个线程调用 count_down() 函数来减少内部计数器。当计数器达到零时,所有等待 latch 的线程都将被释放。如果线程在 latch 准备好之前尝试调用 wait(),它将阻塞直到计数器达到零。
包含 <latch> 头文件
要在您的 C++ 程序中包含 <latch> 头文件,您可以使用以下语法。
#include <latch>
<latch> 头文件的函数
以下是 <latch> 头文件中的所有函数列表。
序号 | 函数及描述 |
---|---|
1 | count_down
将内部计数器递减 1。 |
2 | try_wait
测试内部计数器是否等于零。 |
3 | wait
阻塞直到计数器达到零。 |
4 | arrive_and_wait
递减计数器并阻塞直到它达到零。 |
5 | max
返回实现支持的内部计数器的最大值。 |
带多个计数的 Latch
在下面的示例中,我们将使用 latch 用于两个“A”。每个“A”在完成时递减 latch,主线程等待直到两个“A”都完成然后打印一条消息。
#include <iostream> #include <thread> #include <latch> void a(int b, std::latch & latch) { std::cout << "A" << b << " Is Starting..\n"; std::this_thread::sleep_for(std::chrono::seconds(1)); std::cout << "A" << b << " Finished Work.!\n"; latch.count_down(); } int main() { std::latch latch(2); std::thread x1(a, 1, std::ref(latch)); std::thread x2(a, 2, std::ref(latch)); latch.wait(); std::cout << "Work Is Done..\n"; x1.join(); x2.join(); return 0; }
输出
以上代码的输出如下:
A1 Is Starting.. A2 Is Starting.. A1 Finished Work.! A2 Finished Work.! Work Is Done..
广告