命名空间
变体
操作

std::experimental::flex_barrier::arrive_and_wait

来自 cppreference.cn
void arrive_and_wait();
(并发技术规范)

阻塞并抵达 flex_barrier 的同步点。

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

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

arrive_and_droparrive_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 个抵达其同步点的线程。

[编辑] 异常

不抛出任何异常。

[编辑] 参见

到达同步点并从参与线程集合中移除当前线程
(public member function) [编辑]