我很確定這是一個天真的問題,但仍然會問這個問題,因爲我在網上找不到太多幫助。我正在使用pthreads編寫一個C++代碼。以下是所述方法如何檢查pthread_mutex_t是否被鎖定
void Method1()
{
try
{
pthread_mutex_lock(&syncLock);
statement1;
statement2;
pthread_mutex_unlock(&syncLock);
statement3;
statement4;
}
catch(exception& e)
{
log error
}
}
其中SYNCLOCK是pthread_mutex_t
類型的,並且使用缺省初始化初始化一個的輪廓。
我的問題是,如果在方法的statement2中引發異常,則控件直接傳遞給catch語句。在這種情況下,我的互斥鎖保持鎖定狀態。但我也不能簡單地在catch塊中寫入一個解鎖語句,因爲如果異常來自語句3,那麼互斥鎖已被解鎖,並且對已經解鎖的互斥鎖調用解鎖會導致未定義的行爲。
那麼有沒有一種方法可以檢查互斥鎖是否已在解鎖語句中解鎖。或者,在C++中是否存在C#樣式鎖定語句替代方案,因此我確信即使從該區塊中拋出異常,也會釋放該鎖定。
我不傾向於使用庫來實現此目的。一個簡單的自定義解決方案將非常感激
感謝
感謝您的解決方案! –