条件变量之倒计时(CountDownLatch)
倒计时是一种常用且易用的同步手段,其用途是:
主线程发起多个多个子线程,等这些子线程各自都完成一定的任务之后,主线程才继续执行。通常用于主线程等待子线程完成初始化。
主线程发起多个子线程,子线程都等待主线程,主线程完成其他一些任务之后通知所有子线程开始执行。通常用于多个子线程等待主线程发出“起跑”命令。
代码如下:
头文件:class CountDownLatch : boost::noncopyable
{
public:
explicit CountDownLatch(int count);
void wait();
void countDown();
int getCount() const;
private:
mutable MutexLock mutex_;
Condition condition_;
int count_;
};
实现:
<pre name="code" class="cpp">CountDownLatch::CountDownLatch(int count)
: mutex_(),
condition_(mutex_),
count_(count)
{
}
void CountDownLatch::wait()
{
MutexLockGuard lock(mutex_);
while (count_ > 0) {
condition_.wait();
}
}
void CountDownLatch::countDown()
{
MutexLockGuard lock(mutex_);
--count_;
if (count_ == 0) {
condition_.notifyAll();
}
}
int CountDownLatch::getCount() const
{
MutexLockGuard lock(mutex_);
return count_;
}
本文介绍了CountDownLatch在多线程编程中的使用场景及其实现原理,包括主线程与子线程之间的同步操作,详细解释了如何利用CountDownLatch实现线程间的等待与唤醒机制。
621

被折叠的 条评论
为什么被折叠?



