std::shared_timed_mutex
来自 cppreference.com
定义于头文件 <shared_mutex> |
||
类 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= [已删除] |
不可复制赋值 (公有成员函数) |
独占锁定 | |
锁定互斥量,如果互斥量不可用则阻塞 (公有成员函数) | |
尝试锁定互斥量,如果互斥量不可用则返回 (公有成员函数) | |
尝试锁定互斥量,如果互斥量在指定的超时时间内不可用则返回 (公有成员函数) | |
尝试锁定互斥量,如果互斥量在指定的超时时间内不可用则返回 尝试锁定互斥量,如果互斥量在指定的时刻之前不可用则返回 (公有成员函数) | |
解锁互斥量 (公有成员函数) | |
| |
以共享所有权方式锁定互斥量,如果互斥量不可用则阻塞 (公有成员函数) | |
尝试以共享所有权方式锁定互斥量,如果互斥量不可用则返回 (公有成员函数) | |
尝试以共享所有权方式锁定互斥量,如果互斥量在指定的超时时间内不可用则返回 (公有成员函数) | |
尝试以共享所有权方式锁定互斥量,如果互斥量在指定的超时时间内不可用则返回 尝试锁定互斥量,如果互斥量在指定的时刻之前不可用则返回 尝试以共享所有权方式锁定互斥量,如果互斥量在指定的时刻之前不可用则返回 | |
unlock_shared 解锁互斥量(共享所有权) |
(公有成员函数)
[编辑] 注意 | 特性测试宏 | 值 | 标准 |
---|---|---|---|
特性 |
__cpp_lib_shared_timed_mutex | (C++14) | std::shared_timed_mutex
|
201402L
[编辑] 示例 本节尚未完善 |
原因:构建一个激励性的示例
一个用于持有资源的类的拷贝赋值运算符,该类可以处理多个读取器,但只能有一个写入器。
#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; }