屏障
导入 <asco/sync/barrier.h>
头文件使用屏障。
调用 arrive()
以获取一个等待 token,调用 token 的成员协程 wait()
等待其它协程到达屏障。
token::wait()
返回 future_void_inline
,需要 co_await
才能开始执行。
constexpr size_t NUM_THREADS = 5;
future_void worker(asco::sync::barrier<NUM_THREADS> &bar, size_t id) {
co_await bar.arrive().wait();
co_return {};
}
future<int> async_main() {
asco::sync::barrier<NUM_THREADS> bar;
for (size_t i = 0; i < NUM_THREADS; ++i) { worker(bar, i + 1); }
co_await bar.all_arrived();
co_return 0;
}