我正在創建這個多線程C++程序,並且在編譯版本模式時,我找到了類錯誤(對象仍爲空),即它看起來像缺少volatile
標記。一切都很不穩定
但問題是,因爲有第二個工作線程觸及各種對象,這意味着在程序中虛擬一切都是不穩定的。
我不知道是否有一種方法來關閉在蘋果LLVM編譯器創造的volatile
關鍵字是專爲修正錯誤的優化。這些錯誤不會在調試模式下顯示(因爲優化已關閉)。 volatile
處處基本上意味着在每個共享變量聲明前加入volatile
,每成員函數,並加上volatile
。
我想我寧願損失volatile
優化,因爲我忘記標記volatile
,所以冒險出現一個虛假的bug。
如果在優化模式下出現錯誤,但未在調試模式下顯示,則表示程序不正確。如果有的話,我會後悔的是,錯誤沒有在調試模式下顯示出來,因爲在你的代碼中有一個競爭條件,你無法捕捉到。 – dasblinkenlight
不要在多線程中使用volatile(更好地使用std庫,例如std :: atomic):http://software.intel.com/zh-cn/blogs/2007/11/30/volatile-almost-useless-爲多線程編程 – user1837009
嗯,這很清楚發生了什麼。我有一個'vector'數組,它顯示爲空,即使它已被初始化。 – bobobobo