#include 。arrive:到达屏障并减少期待计数。wait:阻塞当前线程,直至期待计数减为 0。arrive_and_wait:到达屏障并把期待计数减少一,然后阻塞直至期待计数减为 0。arrive_and_drop:到达屏障并把期待计数减少一并使后续阶段的初始期待计数减一。线程 1 和 线程 2 先各自执行一些任务,然后在屏障点上等待直到所有线程抵达后再继续执行后续代码:
#include
#include
#include
#include
using namespace std::literals;
constexpr int num_threads = 2;
std::barrier barrier(num_threads);
std::vector<int> v1;
std::vector<int> 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;
}