我以這種方式使用boost::mutex::scoped_lock
:爲什麼Boost 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做其他線程的信號;
但是,這似乎不起作用,因爲其他線程無法獲得互斥體鎖!
我假設通過將scoped_lock包圍在括號中,我將終止它的鎖定。情況並非如此?在線閱讀說它只在調用析構函數時放棄了互斥體。當它不在當地的範圍內時它不會被銷燬嗎?代碼
信令部分:
while(running_){
boost::mutex::scoped_lock scopedLock(mutex_);
//Run some function that need to be done...
if(waitBoolean){
waitBoolean=false;
}
}
謝謝!
scoped_lock對象在您的右括號中被銷燬並釋放互斥鎖。請發佈代碼的信號部分。 順便提一下,boost :: condition_variable更適合您的需求 – neuro 2009-08-10 17:55:25
看到您的信令代碼它可以在某些情況下工作,但取決於您所做的處理(您的意見)。如果有其他同步器,則會更糟糕。條件變量是實現這一目標的方法。我發佈了用於執行此類同步的代碼。 – neuro 2009-08-10 18:19:19
信號線程的「工作」不會鎖定其他任何東西。它獨立運行。 – Alex 2009-08-10 18:27:08