<四>关于lock_guard和unique_lock
2023-02-18 16:33:46 时间
unique_lock condition_variable
1:lock_guard 和 unique_lock
2:condition_variable wait 和 notify_all
方式1
std::mutex mtx;
mtx.lock();
..
...
mtx.unlock();//
容易出现死锁
方式2
lock_gurad<std::mutex> lock(mtx)
出作用域,自动析构(释放锁),缺陷:不能用在函数参数传递或者返回过程中.
只能用在简单的临界区代码段的互斥操作中.
方式3
unique_lock不仅可以使用在简单的临界代码段的互斥操作中,还可以使用在函数调用过程中
unique_lock<std::mutex>(mtx)
关于condition_variable cv
cv.wait(unique_lock);// 会做两件事1:使线程进入等待状态 2:unique_lock.unlock 把mtx给释放掉
所以简单的场景,不涉及线程通信时,可以使用 lock_guard, 但是涉及函数调用或线程通信时 使用 unique_lock
关于cv.notify_all() 是通知在cv上等待的线程,条件成立里,可以起来干活了,其他在cv上等待的线程,从等待状态=>阻塞状态=》去抢夺锁=》抢到锁后开始运行
相关文章
- 内网服务器离线编译安装mysql5.7并调优
- redis cluster + predixy 手把手部署过程
- 从统一视角看各类高效finetune方法
- .NET6打包部署到Windows Service
- .NET7 一个实用功能-中央包管理
- Docker 部署Redis哨兵
- 单细胞转录组 | 多样本处理与Harmony整合
- 聊聊如何利用redis实现多级缓存同步
- docker高级篇4-分布式存储之实战案例:Redis集群主从容错切换迁移案例
- Redis的数据持久化
- Redis的AOF持久化
- Redis高可用之哨兵机制实现细节
- 剑指 Offer 10- II. 青蛙跳台阶问题
- 1137. 第 N 个泰波那契数
- 46. 全排列
- 231. 2的幂
- bitset
- 371. 两整数之和
- 1356. 根据数字二进制下 1 的数目排序
- 数组中出现次数超过一半的数字