std::shared_timed_mutex
來自 cppreference.com
定義於標頭檔案 <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; }