web-dev-qa-db-ja.com

std :: lock_guardをtry_lockとともに使用する

ミューテックスを取得するときにlockではなくstd::lock_gaurdを呼び出すようにtry_lockに指示する方法はありますか?

私が考えることができる唯一の方法は、std::adopt_lockを使用することです:

if (!_mutex.try_lock())
{
    // Handle failure and return from the function
}
std::lock_guard<my_mutex_class> lock(_mutex, std::adopt_lock);

ロックを明示的に取得してlock_guardにロックを解放する責任を与えるのではなく、私の問題の組み込みソリューションはありますか?

30
Mr. Anderson

_lock_guard_の不変の基本設計は、常にロックを保持することです。これにより、デストラクタが無条件にunlock()を呼び出すことができ、余分な状態を保存する必要がないため、オーバーヘッドが最小限に抑えられます。

ロックしようとする動作が必要な場合は、_unique_lock_を使用します。

_std::unique_lock<std::mutex> lock(_mutex, std::try_to_lock);
if(!lock.owns_lock()){
    // mutex wasn't locked. Handle it.
}
_
51
T.C.