The Open Group的規格爲pthread_mutex_lock
,pthread_mutex_trylock
,pthread_mutex_unlock
和朋友位於here。PTHREAD_MUTEX_ *和PTHREAD_MUTEX_ERRORCHECK是否互斥?
該頁面列出了四個互斥屬性值:PTHREAD_MUTEX_NORMAL
,PTHREAD_MUTEX_ERRORCHECK
,PTHREAD_MUTEX_RECURSIVE
和PTHREAD_MUTEX_DEFAULT
。
所有的值是否相互排斥?在調試配置中,我們是否允許將OR
這些值放在一起?例如,我想在Debug中進行完整的錯誤檢查,因此PTHREAD_MUTEX_ERRORCHECK | PTHREAD_MUTEX_RECURSIVE
是一個有效的配置?
我問的原因是我抓到一個錯誤pthread_mutexattr_settype
。我不確定它是否有效的配置和OS X的實現錯誤;或者它的無效配置和預期的標準行爲。如果它是OS X的錯誤,我仍然可以在其他平臺上的調試配置中享受增強的錯誤檢查。
謝謝咖啡。 「在其他錯誤檢查的情況下......」 - 這是問題(對我來說)。當「錯誤檢查」生效時,我不知道會進行多少附加檢查。如果pthread以效率名義跳過一些檢查,那麼我希望執行這些檢查。我從來沒有理解過「讓我們快速做錯事」的思想。如果它壞了,那麼你做多快就沒關係了。 – jww
@noloader:POSIX不允許在'PTHREAD_MUTEX_RECURSIVE'情況下省略錯誤檢查 - 'PTHREAD_MUTEX_RECURSIVE'和'PTHREAD_MUTEX_ERRORCHECK'之間的唯一區別是在已經持有的relock-a-mutex情況下會發生什麼情況。只有'PTHREAD_MUTEX_DEFAULT'和'PTHREAD_MUTEX_NORMAL'具有未定義行爲的情況。未定義的行爲案例背後的哲學是,正確的應用程序不應該支付檢查錯誤應用程序中的錯誤的間接成本。 – caf