Namespaces
Variants

std:: shared_timed_mutex

From cppreference.net
Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
shared_timed_mutex
(C++14)
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
Safe reclamation
Hazard pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11) (deprecated in C++20)
(C++11) (deprecated in C++20)
Memory ordering
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
定義済みヘッダー <shared_mutex>
class shared_timed_mutex ;
(C++14以降)

shared_timed_mutex クラスは、共有データが複数のスレッドから同時にアクセスされるのを防ぐために使用できる同期プリミティブです。排他的アクセスを提供する他のミューテックス型とは対照的に、 shared_timed_mutex には2つのアクセスレベルがあります:

  • exclusive - ミューテックスを所有できるスレッドは一つだけです。
  • shared - 同一ミューテックスの所有権を複数のスレッドが共有できます。

共有ミューテックスは通常、複数のリーダーがデータ競合を引き起こすことなく同時に同じリソースにアクセスできるが、ライターは一度に1つしかアクセスできない状況で使用されます。

timed_mutex と同様に、 shared_timed_mutex はタイムアウト付きでの所有権要求を可能にします。これは以下のメンバー関数を通じて実現されます: try_lock_for() try_lock_until() try_lock_shared_for() try_lock_shared_until()

shared_timed_mutex クラスは、 SharedTimedMutex および StandardLayoutType のすべての要件を満たします。

目次

メンバー関数

ミューテックスを構築する
(public member function)
ミューテックスを破棄する
(public member function)
operator=
[deleted]
コピー代入不可
(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;
}