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

加锁 → 循环判断条件

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

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

相关推荐
牟师傅敲代码1 小时前
第2章:底层时间驱动机制
c++
并不喜欢吃鱼1 小时前
从零开始 C++------ 十四【C++ 数据结构】unordered_map/unordered_set 全解析:从使用到底层模拟实现
开发语言·数据结构·c++
小欣加油2 小时前
leetcode3633 最早完成陆地和水上游乐设施的时间I
数据结构·c++·算法·leetcode
啦啦啦啦啦zzzz2 小时前
数据结构:二叉排序树(递归与非递归函数的全部实现)
数据结构·c++·二叉排序树
£suPerpanda2 小时前
AtCoder Beginner Contest 453
c++·算法
郝学胜-神的一滴2 小时前
Qt 高级开发 022:栅格布局深度实战
开发语言·c++·qt·软件构建·用户界面
basketball6162 小时前
设计模式入门:3. 装饰器模式详解 C++实现
c++·设计模式·装饰器模式
程序大视界2 小时前
【C++ 从基础到项目实战】C++(三):函数进阶——重载、回调、递归与默认参数
开发语言·c++·cpp
西梅汁2 小时前
C++ 线程间通信(二)
c++
minji...2 小时前
Linux 高级IO(七)多进程、多线程的Reactor反应堆模式扩展、OTOL
linux·运维·c++·多路转接·epoll·reactor反应堆模型