std::experimental::flex_barrier::arrive_and_wait
来自 cppreference.cn
< cpp | experimental | flex barrier
void arrive_and_wait(); |
(并发 TS) | |
阻塞并在 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
个线程。
[编辑] 异常
不抛出任何异常。
[编辑] 参见
到达同步点并将当前线程从参与线程集中移除 (公共成员函数) |