std::experimental::flex_barrier:: arrive_and_wait
|
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
个线程。
异常
不抛出任何异常。
参见
|
抵达同步点并从参与线程集合中移除当前线程
(公开成员函数) |