名前空間
変種
操作

std::shared_timed_mutex

From 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)
future
(C++11)
(C++11)
(C++11)
(C++11)
安全なメモリ解放 (Safe Reclamation)
(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 には2つのレベルのアクセスがあります。

  • 排他 - 1つのスレッドのみがミューテックスを所有できます。
  • 共有 - 複数のスレッドが同じミューテックスの所有権を共有できます。

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

timed_mutex と同様に、shared_timed_mutextry_lock_for()try_lock_until()try_lock_shared_for()try_lock_shared_until() メンバ関数を介して、タイムアウト付きで shared_timed_mutex の所有権を要求する機能を提供します。

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

目次

[編集] メンバ関数

ミューテックスを構築します
(public メンバ関数) [編集]
ミューテックスを破棄します
(public メンバ関数) [編集]
operator=
[削除]
コピー代入不可
(public メンバ関数) [編集]
排他ロック
ミューテックスをロックします。ミューテックスが利用できない場合はブロックします
(public メンバ関数) [編集]
ミューテックスをロックしようとします。ミューテックスが利用できない場合は戻ります
(public メンバ関数) [編集]
ミューテックスをロックしようとします。ミューテックスが
指定されたタイムアウト期間利用できなかった場合は戻ります
(public メンバ関数) [編集]
ミューテックスをロックしようとします。ミューテックスが
指定された時刻まで利用できなかった場合は戻ります
(public メンバ関数) [編集]
ミューテックスをアンロックします
(public メンバ関数) [編集]
共有ロック
共有所有権のためにミューテックスをロックします。ミューテックスが利用できない場合はブロックします
(public メンバ関数) [編集]
共有所有権のためにミューテックスをロックしようとします。ミューテックスが利用できない場合は戻ります
(public メンバ関数) [編集]
共有所有権のためにミューテックスをロックしようとします。ミューテックスが
指定されたタイムアウト期間利用できなかった場合は戻ります
(public メンバ関数) [編集]
共有所有権のためにミューテックスをロックしようとします。ミューテックスが
指定された時刻まで利用できなかった場合は戻ります
(public メンバ関数) [編集]
ミューテックスをアンロックします (共有所有権)
(public メンバ関数) [編集]

[編集] 注釈

機能テストマクロ 規格 機能
__cpp_lib_shared_timed_mutex 201402L (C++14) std::shared_timed_mutex

[編集]

複数のリーダーは扱えるが、ライターは1つしか扱えないリソースを保持するクラスのコピー代入演算子。

#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;
}
English 日本語 中文(简体) 中文(繁體)