bool try_lock();
概要
共有ロックの取得を試みる
効果
pm->try_lock_shared();
※pm
はメンバ変数として保持している、ミューテックスオブジェクトへのポインタ
事後条件
owns_lock()
の値が、pm->try_lock_shared()
の戻り値になること
戻り値
pm->try_lock_shared()
の戻り値が返る
例外
この関数は、pm->try_lock_shared()
関数内で投げられうるあらゆる例外を投げる可能性がある。
そのほかに、以下のerror conditionを持つsystem_error
例外オブジェクトを送出する可能性がある:
operation_not_permitted
:pm
がNULL
resource_deadlock_would_occur
:owns_lock() == true
の状態でこの関数が呼び出された
例
#include <cassert>
#include <system_error>
#include <shared_mutex>
int main()
{
std::shared_timed_mutex mtx;
{
// 遅延ロックする(ここではロックを取得しない)
std::shared_lock<std::shared_timed_mutex> lock(mtx, std::defer_lock);
// 共有ロックの取得を試みる
if (!lock.try_lock()) {
// 共有ロックの取得に失敗
std::error_code ec(static_cast<int>(std::errc::device_or_resource_busy), std::generic_category());
throw std::system_error(ec);
}
assert(lock.owns_lock() == true);
}
}
出力
バージョン
言語
- C++14
処理系
- Clang: 3.5 ✅
- GCC: 4.9 ✅
- ICC: ??
- Visual C++: 2015 ✅