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

加锁 → 循环判断条件

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

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

相关推荐
David猪大卫13 分钟前
【C++修炼】哈希表的实现
数据结构·c++·笔记·学习·算法·哈希算法·散列表
广州山泉婚姻19 分钟前
列表初始化:C++11全新初始化体系
c++·人工智能
莫生灬灬27 分钟前
灵码 LingBuilder:用中文写代码,确定性生成真实 C++ 工程(开源)
c++·开源·mfc
浅念-29 分钟前
C++ Protobuf 入门实战:基于通讯录项目吃透proto3语法与序列化
linux·服务器·网络·c++·protobuf·proto·proto3
汉克老师2 小时前
CSP-J 初赛(以满分为目标):第三十九课《数学与逻辑②——阶乘、排列数与组合数:公式到底从哪里来?》
c++·csp-j·小学生·学c++编程
水饺编程2 小时前
第5章,[Win32 章节] :在平面直角坐标系中描点
c语言·c++·windows·visual studio
linx2952 小时前
单元九 · 零基础路线图-第 7–9 周·类与 RAII
c语言·开发语言·数据结构·c++·嵌入式硬件·算法
布莱克6052 小时前
C++ 七大排序算法详解:选择、冒泡、插入、计数、堆、快速与归并排序
数据结构·c++·算法·排序算法
一只旭宝2 小时前
Python 与 C/C++ 内存模型对比总结
c语言·c++·python
心态还需努力呀3 小时前
把 Flameshot 编译进鸿蒙 PC:一次 Qt C++ 截图工具的源码级移植实战
c++·qt·harmonyos