Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

屏障

导入 <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;
}