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

加锁 → 循环判断条件

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

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

相关推荐
zmzb01035 小时前
C++课后习题训练记录Day176
开发语言·c++
王维同学6 小时前
跨位数进程的映像、命令行与环境块读取
c++·windows·安全
Rabitebla6 小时前
C++ STL 之 set 详解:从底层红黑树到实际应用
开发语言·数据结构·c++·算法·leetcode
liulilittle6 小时前
无锁多生产者多消费者队列的工程实现剖析——算法、内存模型与性能
算法·多线程·并发·无锁·mpmc·lock-free
誰能久伴不乏6 小时前
深入解析 C++ STL 底层原理:从设计哲学到内存收割机
c++·架构·stl
jinyishu_6 小时前
C++继承与多态进阶
开发语言·c++·程序人生
程序猿编码6 小时前
用 C++ 从零写一个能训练的 GPT:标量自动微分 + Arena 内存池
开发语言·c++·gpt·transformer·模型推理
库玛西6 小时前
快速幂算法全景总结图:从“愚公移山”到“细胞分裂”
c语言·c++·笔记·算法
郝学胜_神的一滴7 小时前
Qt 高级编程 038:打造高颜值下拉菜单按钮
c++·qt
小鬼头编程7 小时前
信息学竞赛体系(CSP-J/S、NOIP、NOI、IOI)
c++·人工智能·青少年编程