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 的所有要求。
目录 |
[编辑] 成员函数
构造互斥锁 (公开成员函数) | |
销毁互斥锁 (公开成员函数) | |
operator= [已删除] |
不可复制赋值 (公开成员函数) |
独占锁定 | |
锁定互斥锁,如果互斥锁不可用则阻塞 (公开成员函数) | |
尝试锁定互斥锁,如果互斥锁不可用则返回 (公开成员函数) | |
尝试锁定互斥锁,如果互斥锁已 不可用达到指定的超时时长则返回 (公开成员函数) | |
尝试锁定互斥锁,如果互斥锁已 不可用直到达到指定时间点 (公开成员函数) | |
解锁互斥锁 (公开成员函数) | |
| |
为共享所有权锁定互斥锁,如果互斥锁不可用则阻塞 (公开成员函数) | |
尝试为共享所有权锁定互斥锁,如果互斥锁不可用则返回 (公开成员函数) | |
尝试为共享所有权锁定互斥锁,如果互斥锁已 不可用达到指定的超时时长则返回 (公开成员函数) | |
尝试为共享所有权锁定互斥锁,如果互斥锁已 不可用直到达到指定时间点 (公开成员函数) | |
解锁互斥锁(共享所有权) (公开成员函数) |
[编辑] 注意
特性测试 宏 | 值 | Std | 特性 |
---|---|---|---|
__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; }