muduo 使用mutex 和condition_variable 重写CountDownLatch.h int CountDownLatch::getCount() const
时间: 2024-01-20 09:16:30 浏览: 28
以下是使用mutex和condition_variable重写CountDownLatch.h的示例代码:
```cpp
#include <mutex>
#include <condition_variable>
class CountDownLatch {
public:
explicit CountDownLatch(int count) : count_(count) {}
void wait() {
std::unique_lock<std::mutex> lock(mutex_);
condition_.wait(lock, [this] { return count_ == 0; });
}
void countDown() {
std::lock_guard<std::mutex> lock(mutex_);
--count_;
if (count_ == 0) {
condition_.notify_all();
}
}
int getCount() const {
std::lock_guard<std::mutex> lock(mutex_);
return count_;
}
private:
mutable std::mutex mutex_;
std::condition_variable condition_;
int count_;
};
```
在上述代码中,我们使用了一个互斥锁(mutex)和一个条件变量(condition_variable)来实现CountDownLatch类。wait()函数会在条件变量上阻塞等待,直到count_变为0才会继续执行。countDown()函数会减少count_的值,并在count_变为0时通知所有等待的线程。getCount()函数用于获取当前的count_值。