【基础分析】—— 条件变量wait(lock, 谓词)

1. 条件变量 wait(lock, 谓词) 完整流程图

cpp 复制代码
 开始
  ↓
持有互斥锁 lock(调用前必须持有)
  ↓
进入while循环(防虚假唤醒)
  ↓
判断谓词:     !队列空?
     ┌───────────┴───────────┐
  不成立(空)        成立(非空)
       ↓                     ↓
  执行wait(lock)      跳出循环,执行业务
       ↓
  1. lock.unlock()(释放锁)
       ↓
  2. 线程阻塞,等待notify

2. wait(lock) 内部原子操作流程图

【调用 wait 前】已持有锁

↓

┌────────────┐

│ wait 内部执行 │

│ 1. unlock() 解锁 │ ← 关键:必须释放,否则死锁

│ 2. 线程阻塞休眠 │

│ 3. 被 notify 唤醒 │

│ 4. lock() 重新加锁 │ ← 保证返回时仍持有锁

└────────────┘

↓

【wait 返回】重新持有锁

3. 最精简一图流(面试背诵版)

加锁 → 循环判断条件

↓

不满足 → 解锁 → 阻塞 → 唤醒 → 重加锁 → 再判断

↓

满足 → 退出循环,执行业务

相关推荐
wflynn15 小时前
GitHub 今日推荐|gpu-unlock-ada:Ada 显卡张量算力翻倍解锁
开源·github·c
choumin16 小时前
C++中万能引用与std::forward的作用和用法
c++·万能引用·std forward
下一站春风里17 小时前
位运算完整学习笔记:按位与(&)+ 异或(^)
开发语言·c++·算法
努力努力再努力wz20 小时前
【C++高阶系列】C++20 协程底层原理:函数为什么能暂停?从状态机到 Task,彻底串起挂起、恢复与协程调度
开发语言·c++·c++20·1024程序员节
划破黑暗的第一缕曙光20 小时前
[C++]:4.模板
c++·template·模板·函数模版·类模版
十五年专注C++开发20 小时前
pybind11:一个跨C++和Python平台的编程库
开发语言·c++·python·pybind11
CodeYp201920 小时前
第11讲:stack 和 queue
开发语言·c++·queue·stack
沫璃染墨21 小时前
《Qt从零入门系列(十五):Qt线程安全与锁机制详解——从QMutex到RAII与读写锁实战》
开发语言·c++·qt·安全·交互·线程·qt6.3
hetao173383721 小时前
2026-10-25 hetao1733837 的刷题记录
c++·算法
fqbqrr21 小时前
2610C++,UI复合技术在窗口中绘画字体图标
c++·ui