cpp
std::mutex _mutex;
std::condition_variable _cond;
bool _isFinish; //命令執行完成
void wait()
{
std::unique_lock<std::mutex> lock(_mutex);
_cond.wait(lock, [this] { return _isFinish; });
}
void notify()
{
std::unique_lock<std::mutex> lock(_mutex);
_isFinish = true;
_cond.notify_one();
}
std::condition_variable条件变量是无状态的,需要通过lambda 表达式函数先检测状态**。**
调用wait函数的具体步骤:
第1步:先检查 lambda(这是关键!)
-
线程已持有
mutex_锁 -
立即执行 lambda 表达式判断条件
-
如果 lambda 返回
true:条件已满足,wait函数立即返回,线程继续执行(且保持持有锁) -
如果 lambda 返回
false:条件不满足,进入第2步
第2步:进入等待状态
-
原子性地:释放锁 + 线程阻塞
-
等待
notify_one()或notify_all()
第3步:被唤醒后
-
重新获取锁
-
再次检查 lambda(循环检查)
-
如果
true则返回,如果false则继续等待