2011-01-11 15 views
-1

scoped_lockの範囲外にミューテックスのロックを解除できますか?どうすればいい?boost :: scoped_lock unlock

{boost::mutex::scoped_lock lock(mutex); 

if(conditionaA) 
{ 
    if(conditionB) 
    { 
    //could I unlock here as I don't want to hold the lock too long. 
    //perform calculation 
    } 

} 
else 
{ 

} 

}//lock scope 

ありがとうございます。

+3

ドキュメントを読んでいないと評価していますが、Googleでは「scoped_lock unlock」の最初の結果として表示されるため、レートが2倍低下します。 –

+0

純粋な怠け者なのでこの質問をしています。 -1。 –

答えて

5

はい、 .unlock()メンバ関数を使用するだけです。

15

はい。

unlock()メソッドを使用してください。

{boost::mutex::scoped_lock lock(mutex); 

if(conditionaA) 
{ 
    if(conditionB) 
    { 
    //could I unlock here as I don't want to hold the lock too long. 
    lock.unlock(); // <-- 
    } 

    //perform calculation 

} 
else 
{ 

} 

}//lock scope 
1

boost::mutex::scoped_lockboost::unique_lock<mutex>と同じで、あなたはそれらのロックを解除することができます。これを行うにはスレッドでロックする必要があります。そうしないと例外が発生します。

unique_lockのデストラクタは、破壊時にmutexがロック解除されることを保証します。ロックオブジェクトを使用する目的は、ロックが保持されているときに例外がスローされた場合にこれを保証することです。

関連する問題