std::recursive_mutex::try_lock
From cppreference.com
< cpp | thread | recursive mutex
| bool try_lock() noexcept; |
(C++11以降) | |
ミューテックスのロックを試みます。すぐに返します。ロックの取得に成功した場合は true を返し、それ以外の場合は false を返します。
この関数は、ミューテックスが現在他のスレッドによってロックされていなくても、偶発的に失敗して false を返すことがあります。
スレッドは、再帰ミューテックスに対して try_lock を繰り返し呼び出すことができます。try_lock の成功した呼び出しは、所有権カウントをインクリメントします。ミューテックスは、スレッドが対応する回数だけ unlock を呼び出した後にのみ解放されます。
所有権のレベルの最大数は未指定です。この数が超えられた場合、try_lock の呼び出しは false を返します。
同じミューテックスに対する以前の unlock() 操作は、std::memory_order で定義されるように) この操作と 同期します。ただし、返り値が false である場合、以前の lock() はこの操作と同期しないことに注意してください。
目次 |
[編集] パラメータ
(なし)
[編集] 戻り値
ロックが正常に取得された場合は true、それ以外の場合は false。
[編集] 例外
何もスローしません。
[編集] 例
このコードを実行
#include <iostream> #include <mutex> int main() { std::recursive_mutex test; if (test.try_lock()) { std::cout << "lock acquired\n"; test.unlock(); } else std::cout << "lock not acquired\n"; test.lock(); // non-recursive mutex would return false from try_lock now if (test.try_lock()) { std::cout << "lock acquired\n"; test.unlock(); } else std::cout << "lock not acquired\n"; test.unlock(); }
出力
lock acquired lock acquired
[編集] 関連項目
| ミューテックスをロックします。ミューテックスが利用できない場合はブロックします (public メンバ関数) | |
| ミューテックスをアンロックします (public メンバ関数) | |
| C言語のドキュメント for mtx_trylock
| |