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 交换数据成员 (公开成员函数) | |
解除关联 mutex 而不解锁 (公开成员函数) | |
观察器 | |
返回指向关联的互斥的指针 (公开成员函数) | |
测试锁是否占有其关联的互斥 (公开成员函数) | |
测试锁是否占有其关联的互斥 (公开成员函数) |
非成员函数
(C++14) |
std::swap 对 shared_lock 的特化 (函数模板) |
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
DR | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 2981 | C++17 | 曾提供来自 shared_lock<Mutex> 的冗余推导指引
|
已移除 |