wait group

include: co/co.h.

#co::wait_group

co::wait_group 类似于 golang 中的 sync.WaitGroup,可用于等待协程或线程的退出。

#constructor

1. explicit wait_group(uint32 n);
2. wait_group();
3. wait_group(wait_group&& wg);
4. wait_group(const wait_group& wg);
  • 1, 将内部计数器初始化为 n
  • 2, 默认构造函数,将内部计数器初始化为 0。
  • 3, 移动构造函数。
  • 4, 拷贝构造函数,仅将内部引用计数加 1。

#add

void add(uint32 n=1) const;
  • 将内部计数器加 nn 默认为 1。

#done

void done() const;
  • 将内部计数器减 1。

#wait

void wait() const;
  • 等待直到内部计数器的值变为 0。

#代码示例

#include "co/co.h"
#include "co/cout.h"

DEF_uint32(n, 8, "coroutine number");

int main(int argc, char** argv) {
    flag::parse(argc, argv);
    
    co::wait_group wg;
    wg.add(FLG_n);

    for (uint32 i = 0; i < FLG_n; ++i) {
        go([wg]() {
            co::print("sched: ", co::sched_id(), " co: ", co::coroutine_id());
            wg.done();
        });
    }

    wg.wait();
    return 0;
}