1. 程式人生 > >[N周N語言] C++實現Golang中的WaitGroup

[N周N語言] C++實現Golang中的WaitGroup

class WaitGroup {
public:
    void Add(int incr = 1) {
        counter += incr;
    }

    void Done() {
        counter--;
        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;
};