因爲在C中沒有靜態初始化,我想懶洋洋地初始化一個全局的mtx_t(請保持你的反應速度)。對我來說使用布爾標誌並不是什麼問題,但我寧願只檢查mtx_t變量。有沒有標準的mtx_t'invalid'狀態?
C11的mtx_t有一個幸運的'無效狀態'我可以檢查變量嗎?我在草案標準中找不到任何東西。
因爲在C中沒有靜態初始化,我想懶洋洋地初始化一個全局的mtx_t(請保持你的反應速度)。對我來說使用布爾標誌並不是什麼問題,但我寧願只檢查mtx_t變量。有沒有標準的mtx_t'invalid'狀態?
C11的mtx_t有一個幸運的'無效狀態'我可以檢查變量嗎?我在草案標準中找不到任何東西。
不,沒有可以檢查的無效狀態,使用未初始化的mtx_t
會導致未定義的行爲。
對於mtx_t
而言,沒有靜態初始值設定項的整個事情有點愚蠢,在任何常規架構上都可以毫無問題地完成。 POSIX有它。
此外,很容易將足夠的狀態添加到mtx_t
以使其成爲可能。你必須添加
volatile int
爲你當初始化完成0
使用
atomic_flag
設置一個標誌。在這種情況下,一旦你持有自旋鎖
0
初始化mtx_t
和啓動標誌設置爲一個atomic_flag
這是一個非常明確的描述,說明如何實現雙重檢查鎖定 - volatile int標誌有一個數據競爭。 – Casey 2014-10-02 06:24:15
我不認爲有一個。 C11線程沒有被廣泛實現,文檔也很差(在規範本身!)。所以如果你在規範中找不到任何東西,就是這樣。 – 2014-10-01 21:34:07