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

阻塞在std::condition_variable的线程收通知未获锁的行为问询

std::condition_variable通知后锁未释放的行为规范说明

当阻塞在std::condition_variable的线程收到通知时,它会尝试重新获取关联的互斥锁(即调用wait/wait_for/wait_until时传入的std::unique_lock绑定的mutex)。如果此时锁仍被其他线程持有(比如你测试中通过15秒睡眠让锁长期不可用),该线程会进入mutex的等待队列,等待锁被释放后再继续执行——这个行为完全符合C++标准,并非未定义行为。

从标准定义的wait系列函数流程可以明确这点:

  • 线程调用wait时,会先自动释放持有的unique_lock,然后阻塞等待通知。
  • 收到通知(或触发超时、虚假唤醒)后,线程会自动尝试重新获取unique_lock。
  • 只有成功获取锁后,wait函数才会返回,线程继续执行后续逻辑。

你的测试结果是符合规范的正常表现,不存在未定义行为的风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:25:26