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++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 2981 | C++17 | 曾提供来自 shared_lock<Mutex> 的冗余推导指引
|
已移除 |