std::shared_lock
来自 cppreference.com
在头文件 <shared_mutex> 中定义 |
||
template< class Mutex > class shared_lock; |
(自 C++14 起) | |
类 shared_lock
是一个通用的共享互斥量所有权包装器,它允许延迟锁定、计时锁定和锁所有权的转移。锁定 shared_lock
会以共享模式锁定关联的共享互斥量(要以独占模式锁定它,可以使用 std::unique_lock)。
shared_lock
类是可移动的,但不可复制 - 它满足 MoveConstructible 和 MoveAssignable 的要求,但不满足 CopyConstructible 或 CopyAssignable 的要求。
shared_lock
满足 Lockable 的要求。如果 Mutex
满足 SharedTimedLockable 的要求,则 shared_lock
也满足 TimedLockable 的要求。
为了在共享互斥量中以共享所有权模式等待,可以使用 std::condition_variable_any(std::condition_variable 需要 std::unique_lock,因此只能在独占所有权模式下等待)。
内容 |
[编辑] 模板参数
Mutex | - | 要锁定的共享互斥量的类型。该类型必须满足 SharedLockable 的要求 |
[编辑] 成员类型
类型 | 定义 |
mutex_type
|
Mutex
|
[编辑] 成员函数
构造一个 shared_lock ,可以选择锁定提供的互斥量(公共成员函数) | |
解锁关联的互斥量 (公共成员函数) | |
解锁互斥量(如果拥有),并获取另一个互斥量的所有权 (公共成员函数) | |
| |
锁定关联的互斥量 (公共成员函数) | |
尝试锁定关联的互斥量 (公共成员函数) | |
尝试锁定关联的互斥量,持续指定的时间 (公共成员函数) | |
尝试锁定关联的互斥量,直到指定的时点 (公共成员函数) | |
解锁关联的互斥量 (公共成员函数) | |
修饰符 | |
交换数据成员与另一个 shared_lock (公共成员函数) | |
在不解锁的情况下分离互斥量 (公共成员函数) | |
观察者 | |
返回指向关联互斥量的指针 (公共成员函数) | |
测试锁是否拥有其关联的互斥量 (公有成员函数) | |
测试锁是否拥有其关联的互斥量 (公有成员函数) |
[编辑] 非成员函数
(C++14) |
专门化 std::swap 算法 (函数模板) |
[编辑] 缺陷报告
以下更改行为的缺陷报告已追溯应用到先前发布的 C++ 标准。
DR | 应用于 | 已发布的行为 | 正确行为 |
---|---|---|---|
LWG 2981 | C++17 | 提供了来自 shared_lock<Mutex> 的冗余推导指南 |
已移除 |