Namespaces
Variants

std::experimental::flex_barrier:: arrive_and_wait

From cppreference.net
void arrive_and_wait ( ) ;
(并发技术规范)

阻塞并到达 flex_barrier 的同步点。

如果调用线程不在此 flex_barrier 的参与线程集合中,则行为未定义。

arrive_and_wait 的调用与 flex_barrier 完成阶段的开始同步。完成阶段的结束与从该调用返回同步。

arrive_and_drop arrive_and_wait 的调用永远不会在它们自身之间或相互之间引入数据竞争。

说明

线程在从该调用返回后立即调用 arrive_and_wait() arrive_and_drop() 是安全的(前提是完成阶段的函数对象未返回零)。无需确保所有被阻塞的线程都已退出 arrive_and_wait() 后,线程才能再次调用它。

完成阶段会执行构造 flex_barrier 时指定的函数对象。若该函数返回-1,则参与线程集合保持不变;否则,将创建一个大小为返回值 N 的新参与线程集合,该集合由后续抵达同步点的前 N 个线程组成。若 N == 0 ,则 flex_barrier 仅可被销毁。

num_threads 个线程构造的 flex_barrier 初始参与线程集,是首批到达其同步点的 num_threads 个线程。

异常

不抛出任何异常。

参见

抵达同步点并从参与线程集合中移除当前线程
(公开成员函数)