直到最近,我認爲是錯誤檢查互斥鎖大多爲與正確的代碼沒有什麼價值一個調試工具,但後來我意識到它們具有可替代遞歸互斥體的屬性,如:遞歸或錯誤檢查互斥?
void foo()
{
int ok_to_unlock = !pthread_mutex_lock(m);
/* do something */
if (ok_to_unlock) pthread_mutex_unlock(m);
}
注意pthread_mutex_lock
如果調用者已經保持鎖定,則成功時返回0,並返回EDEADLK
。這種用法的優點是您不必擔心超出任意遞歸鎖定限制; 「鎖定計數」隱含在呼叫幀中。原則上這個習語也可能會稍微好一點,因爲當調用線程已經持有鎖時,從不會調用pthread_mutex_unlock
。
我的問題主要是關於然後風格:不使用錯誤檢查互斥就像從代碼的清晰度此減損?是否有其他原因,你不想這樣使用它們?
這聽起來很主觀。 :) – unwind 2011-04-19 13:23:45
我想;但最後一句話中的問題有點非主觀的轉折點(非風格原因,這種用法會很糟糕)。 – 2011-04-19 13:26:25
除了風格 - 我會研究PTHREAD_MUTEX_ERRORCHECK的性能。如果保存一些pthread_mutex_xxx調用,如果它檢測到錯誤檢查互斥是例如,它可能不值得。比普通或遞歸互斥鎖慢10倍 – nos 2011-04-19 13:27:28