2016-05-13 52 views
2

[thread.mutex.recursive]引用:recursive_mutex的最大擁有級別的下限?

擁有一個recursive_mutex對象可以通過調用該對象上lock()try_lock()獲取所有權的附加級別的線程。沒有說明單個線程可以獲得多少所有權級別。如果線程已獲得recursive_mutex對象的最大所有權級別,則對try_lock()的其他調用將失敗,對lock()的額外調用將​​拋出類型爲system_error的異常。

最大擁有級別」的下限是否大於1?遞歸pthread互斥體呢?

+0

這是[unspecified](http://stackoverflow.com/questions/2397984/undefined -unspecified-and-implementation-defined-behavior)(如在,標準沒有強制任何特定的值,並且實現不需要記錄這個)。 –

+0

這就是說,它基本上是一個參考計數器,並沒有什麼理由(在大多數情況下),至少不是至少一個32位整數。所以,對於所有意圖和目的,我認爲這個限制比你實際需要的要高。 –

+0

雖然很好的問題。沒有給出下限的事實可能是標準中的缺陷。 –

回答

0

該標準沒有規定下限。這可能是故意的。

舊標準(C我認爲)的確使用它來爲這樣的事情提供下限。結果是人們編寫的編碼標準說你不能超過這些下限。例如:它是(而且我認爲仍然是)實現定義了在比較相等性時,外部符號有多少個字符是重要的。因此a_very_very_long_name_indeed_with_extra_paddinga_very_very_long_name_indeed_with_extra_paddingX可能被視爲相同的符號。最小長度被指定爲8,並且寫入編碼標準,指定「外部符號的最大長度是8個字符」。

在這個值的合理下限上:我可以很容易地想象出count可能會被封裝到其他一些字段中,以至於整個事物可以用適當的指令自動更新。因此,它可能比32位少得多。 (它只需要足夠大的最大調用堆棧深度,所以在一個受限制的環境中,31可能已經足夠好了。)