//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版权协议,转载请附上原文出处链接和本声明。