2015-11-29 8 views
8

std::lock_gaurdにはlockの代わりにtry_lockをコールする方法がありますか?try_lockでstd :: lock_guardを使用する

私は考えることができる唯一の方法は、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にそれを解放する責任を与えるというし、ありますか?

+0

私はそれはあなたがすでに使用している組み込みのソリューションだと確信しています。 – user2079303

答えて

22

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. 
} 
関連する問題