AM Daemon ライブラリリファレンス
|
プロセス間およびスレッド間で排他制御を行うためのクラス。 [詳解]
#include <Mutex.h>
公開メンバ関数 | |
Mutex (const wchar_t *name=nullptr) | |
コンストラクタ。 [詳解] | |
Mutex (Mutex &&src) | |
ムーブコンストラクタ。 [詳解] | |
‾Mutex () | |
デストラクタ。 [詳解] | |
Mutex & | operator= (Mutex &&r) |
ムーブ代入演算子。 [詳解] | |
bool | valid () const |
ミューテクスが有効値であるか否かを取得する。 [詳解] | |
bool | lock () |
ロックを取得する。取得できるまでブロックする。 [詳解] | |
bool | try_lock () |
ロックの取得を試行する。取得できなければ即座に false を返す。 [詳解] | |
bool | unlock () |
ロックを開放する。 [詳解] | |
プロセス間およびスレッド間で排他制御を行うためのクラス。
再帰的なロック取得を許可しており、同一プロセスかつ同一スレッドであればメンバ関数 lock および try_lock によるロック取得をブロックなしで何度でも行うことができる。 ただし、ロック取得した回数と同じ回数だけメンバ関数 unlock を呼び出す必要がある。
ロック関係のメンバ関数名はC++11のミューテクスインタフェースに準拠する。 これにより std::lock_guard<Mutex>, std::unique_lock<Mutex> 等の利用が可能となる。 細かな制御を行う場合を除き、それらロック管理クラスの利用が推奨される。
多重起動防止には std::unique_lock<Mutex> と std::try_to_lock を用いるとよい。
|
explicit |
コンストラクタ。
[in] | name | ミューテクス名。 nullptr ならば名前無し。 |
amdaemon::util::Mutex::Mutex | ( | Mutex && | src | ) |
ムーブコンストラクタ。
[in] | src | ムーブ元。ムーブ後は無効値となる。 |
引数 src がロックを取得中であっても構わずムーブする。 その場合、ロックの開放はムーブ先のインスタンスに対して行う必要がある。
amdaemon::util::Mutex::‾Mutex | ( | ) |
デストラクタ。
ロックが開放されていない場合、開放処理が行われる。 再帰的にロックを取得していた場合でもすべて開放されるが、 このインスタンスでロックを取得した回数を超えて開放処理が行われることはない。
ムーブ代入演算子。
[in] | r | ムーブ元となる右辺値。ムーブ後は無効値となる。 |
引数 r がロックを取得中であっても構わずムーブする。 その場合、ロックの開放はムーブ先のインスタンスに対して行う必要がある。
bool amdaemon::util::Mutex::valid | ( | ) | const |
ミューテクスが有効値であるか否かを取得する。
true | 有効値である場合。 |
false | 無効値である場合。 |
コンストラクタでの初期化に失敗した場合や、ムーブ済みの場合に false を返す。 無効値である場合、ロック関係のメンバ関数は何も行わずに失敗する。
bool amdaemon::util::Mutex::lock | ( | ) |
ロックを取得する。取得できるまでブロックする。
true | ロックを取得できた場合。 |
false | 無効値である等の理由でロックを取得できなかった場合。 |
bool amdaemon::util::Mutex::try_lock | ( | ) |
ロックの取得を試行する。取得できなければ即座に false を返す。
true | ロックを取得できた場合。 |
false | 既にロック取得されている等の理由でロックを取得できなかった場合。 |
bool amdaemon::util::Mutex::unlock | ( | ) |
ロックを開放する。
true | ロックを開放できた場合。 |
false | 既に開放済み等の理由でロックを開放できなかった場合。 |