c++并发指南-细说unique_lock
来源:互联网 发布:网络诈骗防范常识 编辑:程序博客网 时间:2024/05/16 01:09
c++11有两种基本的锁类型,一种是lock_guard,一种是unique_lock,lock_guard使用十分简单,但是没有提供给程序足够的灵活度,所以c++11标准添加了Mutex RAII机制的另一个类unique_lock,使用也与lock_guard相似,但提供了更好的上锁,解锁的控制。
unique_lock对象以独占所有权的方式管理mutex对象的上锁和解锁操作。其他unique_lock对象同时拥有某个mutex对象的所有权。
unique_lock构造函数如下:
(1)默认构造函数。
(2)locking初始化。
新创建的unique_lock对象管理mutex对象m,并尝试调用m.lock()对mutex对象进行上锁,如果此时有另外的unique_lock管理了该mutex的对象m,则当前线程会阻塞。
(3)try_locking初始化
新创建的 unique_lock 对象管理 mutex 对象 m,并尝试调用 m.try_lock() 对 Mutex 对象进行上锁,但如果上锁不成功,并不会阻塞当前线程。
(4)deferred初始化
新创建的 unique_lock 对象管理 mutex 对象 m,但是在初始化的时候并不锁住 mutex 对象。 m 应该是一个没有当前线程锁住的 mutex 对象。
(5) adopting 初始化
新创建的 unique_lock 对象管理 mutex 对象 m, m 应该是一个已经被当前线程锁住的 mutex 对象。(并且当前新创建的 unique_lock 对象拥有对锁(Lock)的所有权)。
(6) locking 一段时间(duration)
新创建的 unique_lock 对象管理 mutex 对象 m,并试图通过调用 m.try_lock_for(rel_time) 来锁住 Mutex 对象一段时间(rel_time)
。(7) locking 直到某个时间点(time point)
新创建的 unique_lock 对象管理 Mutex 对象m,并试图通过调用 m.try_lock_until(abs_time) 来在某个时间点(abs_time)之前锁住 Mutex 对象。
(8) 拷贝构造 [被禁用]
unique_lock 对象不能被拷贝构造。
(9) 移动(move)构造
新创建的 unique_lock 对象获得了由 x 所管理的 Mutex 对象的所有权(包括当前 Mutex 的状态)。调用 move 构造之后, x 对象如同通过默认构造函数所创建的,就不再管理任何 Mutex 对象了。
综上所述,由 (2) 和 (5) 创建的 unique_lock 对象通常拥有 Mutex 对象的锁。而通过 (1) 和 (4) 创建的则不会拥有锁。通过 (3),(6) 和 (7) 创建的 unique_lock 对象,则在 lock 成功时获得锁。
值得注意的是,unique_lock 对象同样也不负责管理 Mutex 对象的生命周期,unique_lock 对象只是简化了 Mutex 对象的上锁和解锁操作,方便线程对互斥量上锁,即在某个 unique_lock 对象的声明周期内,它所管理的锁对象会一直保持上锁状态;而 unique_lock 的生命周期结束之后,它所管理的锁对象会被解锁,这一点和 lock_guard 类似,但 unique_lock 给程序员提供了更多的自由。
- c++并发指南-细说unique_lock
- C++并发实战9:unique_lock
- 并发编程 C++11 unique_lock
- [C++11 并发编程] 08 - Mutex std::unique_lock
- 细说C语言优先级
- 细说C语言
- 细说c语言的优先级
- C#——细说事务
- 细说c语言的优先级
- 细说C语言的优先级
- 细说C语言的优先级
- c#—细说多线程(1)
- 细说C语言scanf()函数
- 并发指南教程
- iOS并发编程指南
- iOS并发编程指南
- iOS并发编程指南
- iOS并发编程指南
- 设计模式(21)-Mediator 中介者模式
- Web前端-HeadFirst-笔记-Ch10-层叠与特定性计算
- Scikit-Learn 官方示例
- 剑指offer——二维数组中的查找
- 我的学习之路_第二十四章_form表单以及div+css
- c++并发指南-细说unique_lock
- 如何在页面内实现跳转
- 【Redis】在 Java 中使用 redis
- (3) Shell 输入输出
- 体检微信预约
- cent0S 65 安装 lxc
- 基本算法之希尔排序
- Hadoop2.7.1版本---标准输出HDFS文件系统中的文件
- 13.建造者模式