我有互斥問題...互斥內如果條件
這是我的代碼的一般結構:
#include <mutex>
std::mutex m;
While(1){
m.lock();
if(global_variable1==1){
//CODE GOES HERE
if (err==error::eof){
cout<<"error!"<<endl;
//should I put a m.unlock() here??
continue;
}
int something=1;
global_variable2=something;
}
m.unlock();
usleep(100000);
}
基本上,我想安全地改變全局變量,所以我想我需要使用互斥鎖。我應該只在解鎖互斥之後「if(global_variable1 == 1)」函數,但如果出現錯誤,互斥鎖將不會解鎖。我可以在「continue」之前解鎖它嗎?或者這是否與其他事情混淆?對同一個mutex.lock()有兩個解鎖可能會產生不希望的行爲?
您必須保證'unlock();'調用,但如果您在'continue;'之前放置它,您能確定'unlock(); '會最終被調用? –
是的。該鎖在第一個「if」之前被調用。只有兩種解決方法:「if(error)」和第一個「if」的結尾。第一個if後有一個解鎖。問題是:我是否也應該有一個評論? – Carollour
看起來你應該這樣做。否則當'continue' by-passes bottom'unlock()' –