广州花都网站开发,wordpress 菜单怎么使用方法,阿里巴巴的关联网站,亳州网站建设费用c barrier 使用详解
std::barrier c20
头文件 #include barrier。作用#xff1a;一般被用来协调多个线程#xff0c;在所有线程都到达屏障点之后#xff0c;才允许它们继续执行#xff0c;对于需要线程间同步的并行算法和任务来说非常有用。使用步骤#xff1a…c barrier 使用详解
std::barrier c20
头文件 #include barrier。作用一般被用来协调多个线程在所有线程都到达屏障点之后才允许它们继续执行对于需要线程间同步的并行算法和任务来说非常有用。使用步骤 创建 barrier 对象并指定期待计数在线程中调用 arrive 或者 arrive_and_wait 方法使期待计数减一当期待计数减为 0 后即代表所有线程都已到达屏障点barrier 会解除所有阻塞在屏障点上的线程并重置期待计数。 注意事项 不同于 latch barrier 可重用同时调用 barrier 的成员函数除了析构函数不引入数据竞争在同一个线程中可以多次减少期待计数
std::barrier 成员函数
arrive到达屏障并减少期待计数。wait阻塞当前线程直至期待计数减为 0。arrive_and_wait到达屏障并把期待计数减少一然后阻塞直至期待计数减为 0。arrive_and_drop到达屏障并把期待计数减少一并使后续阶段的初始期待计数减一。
使用示例 线程 1 和 线程 2 先各自执行一些任务然后在屏障点上等待直到所有线程抵达后再继续执行后续代码 #include cstdio
#include thread
#include vector
#include barrierusing namespace std::literals;constexpr int num_threads 2;
std::barrier barrier(num_threads);
std::vectorint v1;
std::vectorint v2;void f1()
{for (int i 0; i 2; i) {v1.push_back(i);// 到达屏障点并阻塞barrier.arrive_and_wait();// 所有线程都到达屏障点后继续执行printf(v2[%d] %d\n, i, v2[i]);}
}void f2()
{for (int i 0; i 2; i) {v2.push_back(i);// 到达屏障点并阻塞barrier.arrive_and_wait();// 所有线程都到达屏障点后继续执行printf(v1[%d] %d\n, i, v1[i]);}
}int main()
{std::jthread t1(f1);std::jthread t2(f2);return 0;
}