名前空間
変種
操作

名前付き要件: Mutex

提供: cppreference.com
< cpp‎ | named req
 
 
名前付き要件
基本
レイアウト
ライブラリ全体
コンテナ
コンテナの要素
イテレータ
ストリーム入出力
乱数
並行処理
(C++11)

Mutex
(C++11)
(C++11)
その他
 

Mutex 要件はスレッド間の同期を含むように Lockable 要件を拡張します。

[編集] 要件

Mutex 型のオブジェクト m について、

  • m.lock() が以下の性質を持ちます。
  • アトミック操作として動作します。
  • ミューテックスの排他所有権を取得できるまで呼び出し元スレッドをブロックします。
  • 同じミューテックスに対する以前の m.unlock() 操作はこのロック操作に対して同期します (解放-取得の std::memory_order と同等です)。
  • 呼び出し元スレッドがすでにそのミューテックスを所有している場合、動作は未定義です (ただし m が std::recursive_mutex または std::recursive_timed_mutex の場合を除きます)。
  • エラーの場合は以下のエラーコードを持つ std::system_error 型の例外が投げられることがあります。
(C++17未満)
  • m.try_lock() が以下の性質を持ちます。
  • アトミック操作として動作します。
  • 呼び出し元スレッドのためのミューテックスの排他所有権の取得をブロックせずに試みます。 所有権が取得されなかった場合、直ちに戻ります。 この関数は、ミューテックスが現在別のスレッドに所有されていなくても、 spurious に失敗して戻ることが許されています。
  • try_lock() が成功した場合、同じオブジェクトに対する以前の unlock() 操作はこの操作に対して同期します (解放-取得の std::memory_order と同等です)。 失敗した try_lock() に対しては同期しません。
  • 例外を投げません。
  • m.unlock() が以下の性質を持ちます。
  • アトミック操作として動作します。
  • 呼び出し元スレッドのミューテックスの所有権を解放し、同じオブジェクトに対する後続の成功したロック操作に対して同期します。
  • 呼び出し元スレッドがミューテックスを所有していない場合、動作は未定義です。
  • 例外を投げません。
  • 単一のミューテックスに対するすべてのロック操作およびロック解除操作がアトミック変数の変更順序として見ることができる単一の全順序で発生します。 順序は個々のミューテックスに固有です。

[編集] ライブラリの型

以下の標準ライブラリの型は Mutex を満たします。

[編集] 関連項目