名稱空間
變體
操作

std::shared_timed_mutex

來自 cppreference.com
< cpp‎ | thread
 
 
併發支援庫
執行緒
(C++11)
(C++20)
this_thread 名稱空間
(C++11)
(C++11)
(C++11)
協同取消
互斥
(C++11)
shared_timed_mutex
(C++14)
通用鎖管理
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
條件變數
(C++11)
訊號量
門閂和屏障
(C++20)
(C++20)
期值
(C++11)
(C++11)
(C++11)
(C++11)
安全回收
(C++26)
危險指標
原子型別
(C++11)
(C++20)
原子型別的初始化
(C++11)(C++20 中已棄用)
(C++11)(C++20 中已棄用)
記憶體排序
(C++11)(C++26 中已棄用)
原子操作的自由函式
原子標誌的自由函式
 
 
定義於標頭檔案 <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 類滿足 SharedTimedMutexStandardLayoutType 的所有要求。

目錄

[編輯] 成員函式

構造互斥體
(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;
}