2
我對於認真使用互斥體相當陌生。可以互斥掛起執行嗎?
在各個地方實現了幾個互斥鎖後,我意識到程序執行掛起(不退出)。我試圖調試它(在日食環境中),但我無法達到一個明確的原因(或者至少我不知道如何找到一個) 但是,我知道現在程序掛起時,它試圖做一個鎖經過幾次迭代後,成功鎖定在同一個地方。
這裏有一些代碼:
void xxx::receiveModule(timeslice now)
{
//check if you have received anything in the incoming buffer
if(!isIncomingDirty())// <- has a mutex inside
{
return;
}
//...
}
bool &yyy::isIncomingDirty() {
boost::unique_lock<boost::shared_mutex> lock(*Communicator_Mutexes[2]));//<-this will cause hang after a few calls
return incomingIsDirty;
}
我不知道在發生問題時死鎖會顯示什麼樣的行爲。 1-這是一個僵局嗎?
2你會在哪裏查找原因?
3-can遞歸鎖定或嵌套鎖定相同的互斥導致這種情況?
和這一個可以是題外話:
4-I交換在他們的方法由不同的線程可以使用類之間互斥。這是一種常見的做法嗎?這樣的事情是否允許?
非常感謝您的意見和解決方案
死鎖通常會導致掛起一些或所有線程/進程/等不能作任何進一步的進展,就不能執行。 –
@rahman是Communicator_Mutexes [2]鎖定在其他地方? –
這就是我正在嘗試手動查找,但沒有運氣。任何建議找到它使用 - 監視器或某物? – rahman