ミューテックスを取得するときに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
にロックを解放する責任を与えるのではなく、私の問題の組み込みソリューションはありますか?
_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.
}
_