You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中wait_for方法的谓词内容是否受互斥锁保护?场景验证问询

C++中std::condition_variable::wait_for的谓词是否受互斥锁保护?

你的理解是错误的,wait_for的谓词执行时全程受互斥锁保护,代码里的countMe操作是线程安全的。

核心逻辑说明

std::condition_variable::wait_for的执行流程明确:

  1. 调用wait_for时,当前线程已经持有传入的unique_lock(即代码中的lock)。
  2. 首先持有锁执行谓词:如果谓词返回true,直接结束等待,锁保持持有状态。
  3. 若谓词返回false,才会解锁互斥锁,进入等待状态(等待超时或被其他线程通知)。
  4. 当等待超时或被唤醒时,会重新获取互斥锁,再次执行谓词检查,此时锁依然是持有的。

针对你的代码分析

在你提供的代码中:

while (true)
{
    std::unique_lock<std::mutex> lock(mtx_kill);
    cv_kill.wait_for(lock, 500ms, [&]() {++countMe; return killFlag; });

    if (killFlag)
    {
        break;
    }
}

每次执行lambda谓词里的++countMe时,当前线程都持有mtx_kill锁,多个线程不会同时修改countMe,不存在线程安全问题。

只有当谓词返回false(即killFlag为false)时,wait_for才会释放锁进入等待状态——但这个阶段不会执行谓词内的代码。

内容的提问来源于stack exchange,提问作者sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 05:10:31