std:: shared_timed_mutex
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Exclusive locking | ||||
| Shared locking | ||||
|
定義済みヘッダー
<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; }