2

C++ Boost スレッドを使用した次のコード行があります。

void threadFunc()
{
boost::mutex::scoped_lock lock(m_Mutex);
//some code here...
condition.notify_one();
} 

次のように、最後の行の前に unlock() 関数を呼び出す必要がありますか? unlock() を呼び出さない場合の違いは何ですか?

void threadFunc()
{
boost::mutex::scoped_lock lock(m_Mutex);
//some code here...
lock.unlock();
condition.notify_one();
} 
4

2 に答える 2

3

いいえ --scoped_lockクラスの要点は、ロックがスコープに関連付けられていることです。つまり、scoped_lockオブジェクトがスコープ外になると、ロックは自動的に解放されます。これにより、(たとえば) 介在するコードのいずれかが例外をスローした場合でも、ロックが解放されることが保証されます。

于 2012-11-07T15:18:50.423 に答える
1

いいえ。ロックは範囲指定されているため、範囲外になると「自動的に」ロックが解除されます。RAII を参照してください。

http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization

于 2012-11-07T15:18:40.663 に答える