我真的不知道爲什麼實施 的pthread_mutex_lock從來沒有測試它的返回值定義的所有源代碼:回報的pthread_mutex_lock沒有測試
即使在書的例子不測試,如果鎖是錯誤的,代碼只是做鎖。
我錯過了什麼原因讓它未經測試?
我真的不知道爲什麼實施 的pthread_mutex_lock從來沒有測試它的返回值定義的所有源代碼:回報的pthread_mutex_lock沒有測試
即使在書的例子不測試,如果鎖是錯誤的,代碼只是做鎖。
我錯過了什麼原因讓它未經測試?
基本上,只有「有趣」的錯誤是EINVAL
,這在大多數程序後析構函數已經摧毀了一些互斥纔會發生,因爲的內存損壞,或者像我從我自己的痛苦經驗知道,程序關閉期間。我看到它的方式,對這種錯誤的唯一合理的反應是放棄程序,另一方面,如果錯誤發生的確是因爲程序已經關閉而非常不方便。當然,這是可以解決的,但這並不是那麼簡單,對於大多數程序來說沒有太多的收穫。
首先,我認爲「所有源代碼」和「從不測試」太強大了。我認爲「一些」和「經常」會更準確。
在書中,錯誤檢查代碼通常被省略以便於說明的清楚。
至於現實世界的代碼,我想答案必須是它被認爲失敗的可能性非常低。這是否是一個好的假設值得商榷。
我同意這種形式,我不認爲物質是「一些」和「經常」是主觀想法。我的意思是,代碼和提供的示例中的「大部分」時間不包括返回這種功能 – dlewin 2011-06-09 14:28:08
然後你不處理內存損壞? – dlewin 2011-06-09 14:24:48
不,你不會「處理」內存損壞,你只是不會首先損壞內存。 – Ringding 2011-06-09 16:13:45
實際上,我的問題更多地是關於EBUSY或EDEADLK,分別是: 「互斥鎖無法獲取,因爲它已被鎖定」和「檢測到死鎖條件或當前線程已擁有該互斥鎖」:是什麼讓你覺得這個不能發生? – dlewin 2011-06-14 11:10:03