c++ latch 使用详解
std::latch c++20
- 头文件
#include <latch>
。 - 作用:提供了一种机制,可以让一个或多个线程等待,直到计数器减为零。
- 注意事项:
- latch 为向下计数器,即只能减少不能增加或者重置。这也使得其只能单次使用;
- 同时调用 latch 的成员函数,除了析构函数,不引入数据竞争;
- 在同一个线程中,可以多次减少 latch 计数;
std::latch 成员函数
count_down
:以不阻塞的方式减少计数器。try_wait
:测试内部计数器是否等于零。wait
:阻塞直至计数器抵达零。arrive_and_wait
:减少计数器并阻塞直至它抵达零。
使用示例
-
线程 1 和 线程 2 模拟工作线程,在线程 1 以及 2 工作完成之后,主线程再继续运行。
#include <cstdio> #include <latch> #include <thread> using namespace std::literals; int main() { // 初始化 latch 计数为 2 std::latch done{2}; // 工作线程,模拟一些工作 std::jthread t1([&done](){ std::this_thread::sleep_for(100ms); done.count_down(); printf("thread1 finish work\n"); }); std::jthread t2([&done](){ std::this_thread::sleep_for(100ms); done.count_down(); printf("thread2 finish work\n"); }); // 等待工作线程完成 done.wait(); printf("all work finished\n"); return 0; }