C++, WaitGroup, like golang sync.WaitGroup

//C++ WaitGroup like golang sync.WaitGroup
class WaitGroup {
public:
    void Add(int incr = 1) { counter += incr; }
    void Done() { if (--counter <= 0) cond.notify_all(); }
    void Wait() {
        std::unique_lock<std::mutex> lock(mutex);
        cond.wait(lock, [&] { return counter <= 0; });
    }

private:
    std::mutex mutex;
    std::atomic<int> counter;
    std::condition_variable cond;
};

版权声明:本文为sky527759原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。