私はboost::mutex::scoped_lock
この方法で使用しています:
void ClassName::FunctionName()
{
{
boost::mutex::scoped_lock scopedLock(mutex_);
//do stuff
waitBoolean=true;
}
while(waitBoolean == true ){
sleep(1);
}
//get on with the thread's activities
}
基本的には、waitBoolean を設定し、他のスレッドは、waitBoolean を false に設定することで完了したことを通知します。
ただし、他のスレッドが mutex_ のロックを取得できないため、これは機能していないようです!!
scoped_lock を角かっこで囲むことで、そのロックが終了すると想定していました。そうじゃないの?オンラインで読むと、デストラクタが呼び出されたときにのみミューテックスを放棄すると書かれています。そのローカルスコープの外に出ると破棄されませんか?
コードのシグナリング部分:
while(running_){
boost::mutex::scoped_lock scopedLock(mutex_);
//Run some function that need to be done...
if(waitBoolean){
waitBoolean=false;
}
}
ありがとう!