在某些時候,我記得讀到直到main()的第一行才能安全地創建線程,因爲編譯器會插入特殊的代碼來在靜態初始化時間內運行線程工作。所以如果你有一個全局對象在構建時創建一個線程,你的程序可能會崩潰。但是現在我找不到原文,我很好奇這個限制有多嚴格 - 這是標準嚴格遵守的嗎?在大多數編譯器上它是真的嗎?它會在C++ 0x中保持真實嗎?一個符合標準的編譯器是否有可能自己創建靜態初始化程序多線程? (例如,檢測到兩個全局對象不相互接觸,並在單獨的線程上初始化它們以加速程序啓動)在靜態初始化期間可以安全地創建線程嗎?
編輯:爲了澄清,我試圖至少了解實現是否真的顯着不同在這方面,或者如果這是僞標準的東西。例如,在技術上,該標準允許對屬於不同訪問說明符(public/protected /等)的成員進行混洗。但沒有編譯器我知道實際上是否這樣做。
「這是嚴格按照標準真正的」 - C++ 03標準對於線程主題沒有什麼可說的。當前行爲所關注的地方是POSIX(它當然是* a *標準,而不是*標準),MSDN,Boost或其他針對編譯器,平臺和線程API的特定於實現的文檔使用。 – 2009-09-18 15:25:31