【基础分析】—— 条件变量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. 最精简一图流(面试背诵版)

加锁 → 循环判断条件

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

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

相关推荐
博客180016 小时前
酷宝的使用方法,超好用的免费界面库,C++、MFC可用
c++·mfc·界面库·库来帮·酷宝
郝学胜_神的一滴18 小时前
CMake 026:属性体系精讲、四大作用域全解 & 实战代码落地
c++·cmake
众少成多积小致巨1 天前
JNI (Java Native Interface) 技术手册中文参考指南
android·java·c++
clint4566 天前
C++进阶(1)——前景提要
c++
夜悊6 天前
C++代码示例:进制数简单生成工具
c++
郝学胜_神的一滴6 天前
CMake 021: IF 条件判据详诠
c++·cmake
_wyt0016 天前
洛谷 B3930 [GESP202312 五级] 烹饪问题 题解
c++·gesp
玖玥拾6 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
один but you7 天前
constexpr函数
c++
凡人叶枫7 天前
Effective C++ 条款41:了解隐式接口和编译期多态
java·开发语言·c++·effective c++