std::shared_timed_mutex:: try_lock_for
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Exclusive locking | ||||
|
shared_timed_mutex::try_lock_for
|
||||
| Shared locking | ||||
|
template
<
class
Rep,
class
Period
>
bool try_lock_for ( const std:: chrono :: duration < Rep, Period > & timeout_duration ) ; |
(C++14以降) | |
ミューテックスのロックを試みます。指定された期間 timeout_duration が経過する(タイムアウト)か、ロックが取得される(ミュー�テックスを所有する)かのいずれか早い方までブロックします。ロックの取得に成功した場合は true を返し、それ以外の場合は false を返します。
timeout_duration が timeout_duration. zero ( ) 以下である場合、この関数は try_lock() と同様に動作します。
この関数は、スケジューリングやリソース競合による遅延のため、 timeout_duration よりも長くブロックする可能性があります。
標準では、時間の計測には std::steady_clock の使用が推奨されています。実装が代わりに std::system_clock を使用する場合、待機時間はクロック調整の影響を受ける可能性もあります。
try_lock() と同様に、この関数は偽の失敗を許容し、 false を返すことがあります。これは、 timeout_duration 中のいずれかの時点でミューテックスが他のスレッドによってロックされていなかった場合でも発生する可能性があります。
同じミューテックスに対する前回の unlock() 操作は、この操作が true を返す場合、 synchronizes-with ( std::memory_order で定義される)関係を形成します。
try_lock_for
が共有モードまたは排他モードのいずれかで既にミューテックスを所有しているスレッドによって呼び出された場合、動作は未定義です。
目次 |
パラメータ
| timeout_duration | - | ブロックする最小期間 |
戻り値
true ロックの取得に成功した場合、それ以外の場合は false 。
例外
timeout_duration によってスローされる例外(標準ライブラリが提供する期間は例外をスローしません)。
例
#include <chrono> #include <iostream> #include <mutex> #include <sstream> #include <thread> #include <vector> using namespace std::chrono_literals; std::mutex cout_mutex; // std::coutへのアクセスを制御 std::timed_mutex mutex; void job(int id) { std::ostringstream stream; for (int i = 0; i < 3; ++i) { if (mutex.try_lock_for(100ms)) { stream << "success "; std::this_thread::sleep_for(100ms); mutex.unlock(); } else stream << "failed "; std::this_thread::sleep_for(100ms); } std::lock_guard<std::mutex> lock{cout_mutex}; std::cout << '[' << id << "] " << stream.str() << '\n'; } int main() { std::vector<std::thread> threads; for (int i{0}; i < 4; ++i) threads.emplace_back(job, i); for (auto& th : threads) th.join(); }
出力例:
[0] failed failed failed [3] failed failed success [2] failed success failed [1] success failed success
関連項目
|
ミューテックスをロックする。利用できない場合はブロックする
(public member function) |
|
|
ミューテックスのロックを試みる。利用できない場合は即座に返る
(public member function) |
|
|
ミューテックスのロックを試みる。指定された時間ポイントに達するまで
利用できない場合は返る (public member function) |
|
|
ミューテックスをアンロックする
(public member function) |