假設線程成功調用pthread_mutex_lock
,那麼在同一個線程中調用pthread_mutex_unlock
仍然可能會失敗?如果是這樣,除了放棄線程之外,你能否真正做些什麼?你如何處理pthread_mutex_unlock失敗?
if(pthread_mutex_lock(&m) == 0)
{
// got the lock, let's do some work
if(pthread_mutex_unlock(&m) != 0) // can this really fail?
{
// ok, we have a lock but can't unlock it?
}
}
從this page,用於pthread_mutex_unlock()
可能的錯誤是:
[EINVAL] mutex指定的值不是指一個初始化 互斥對象。
如果鎖定成功,則這不可能失敗。
[EAGAIN] 互斥量,因此無法獲取,因爲互斥量 遞歸鎖的最大數量已超出。
真的嗎?解鎖?
[EPERM] 當前線程不擁有該互斥:如果
的調用pthread_mutex_unlock()函數可能會失敗。
再次,如果鎖定成功,那麼這也不應該發生。
所以,我的想法是,如果有一個成功的鎖,那麼在這種情況下解鎖應永不失敗,使錯誤檢查和後續處理代碼毫無意義。
謝謝,這幾乎是我的想法。我更新了這個問題,希望能夠讓我更清楚爲什麼要問。在接受答案之前,我想堅持看看能否獲得其他意見。 –