std::shared_timed_mutex
来自 cppreference.cn
| 定义于头文件 <shared_mutex> |
||
| class shared_timed_mutex; |
(C++14 起) | |
shared_timed_mutex 类是一种同步原语,用于保护共享数据,防止多个线程同时访问。与其他只提供独占访问的互斥锁类型不同,shared_timed_mutex 具有两种访问级别:
- 独占 - 只有一个线程可以拥有互斥锁。
- 共享 - 多个线程可以共享同一个互斥锁的所有权。
共享互斥锁通常用于多个读取器可以同时访问相同资源而不会导致数据竞争,但只能有一个写入器进行写入的情况。
与 timed_mutex 类似,shared_timed_mutex 通过 try_lock_for()、try_lock_until()、try_lock_shared_for()、try_lock_shared_until() 成员函数提供在超时时间内尝试获取 shared_timed_mutex 所有权的功能。
shared_timed_mutex 类满足 SharedTimedMutex 和 StandardLayoutType 的所有要求。
目录 |
[编辑] 成员函数
| 构造互斥体 (public member function) | |
| 销毁互斥体 (public member function) | |
| operator= [已删除] |
不可复制赋值 (public member function) |
独占锁定 | |
| 锁定互斥体,如果互斥体不可用则阻塞 (public member function) | |
| 尝试锁定互斥体,如果互斥体不可用则返回 (public member function) | |
| 尝试锁定互斥锁,如果互斥锁在指定超时时间内不可用,则返回 指定超时持续时间不可用 (public member function) | |
| 尝试锁定互斥锁,如果互斥锁在指定超时时间内不可用,则返回 在指定时间点之前不可用 (public member function) | |
| 解锁互斥体 (public member function) | |
| | |
| 以共享所有权锁定互斥体,如果互斥体不可用则阻塞 (public member function) | |
| 尝试以共享所有权锁定互斥体,如果互斥体不可用则返回 (public member function) | |
| 尝试以共享所有权锁定互斥锁,如果互斥锁在指定超时时间内不可用,则返回 指定超时持续时间不可用 (public member function) | |
| 尝试以共享所有权锁定互斥锁,如果互斥锁在指定超时时间内不可用,则返回 在指定时间点之前不可用 (public member function) | |
| 解锁互斥体(共享所有权) (public member function) | |
[编辑] 注意
| 特性测试宏 | 值 | 标准 | 特性 |
|---|---|---|---|
__cpp_lib_shared_timed_mutex |
201402L |
(C++14) | std::shared_timed_mutex
|
[编辑] 示例
| 本节不完整 原因:构建一个有启发性的示例 |
一个类的复制赋值运算符,该类持有可以处理多个读取器但只有一个写入器的资源。
运行此代码
#include <mutex> #include <shared_mutex> class R { mutable std::shared_timed_mutex mut; /* data */ public: R& operator=(const R& other) { // requires exclusive ownership to write to *this std::unique_lock<std::shared_timed_mutex> lhs(mut, std::defer_lock); // requires shared ownership to read from other std::shared_lock<std::shared_timed_mutex> rhs(other.mut, std::defer_lock); std::lock(lhs, rhs); /* assign data */ return *this; } }; int main() { R r; }