2009年8月1日 星期六

C++ 的多緒安全性

簡單的說,因為標準給編譯器優化的限度太寬鬆,導致編譯器可以很大程度地調換指令的順序,因此 critical section 也有可能無法完全包好。不少人以為 volatile 可以禁止優化,從而確保正確順序,但其實它只保證單緒的順序,多緒的狀況還是無法保證;連鬼才 Andrei Alexandrescu 都在他的神作 Morden C++ Design 裡犯了這個錯誤(我也不認為他示範的 Singleton 真的有 thread-safe)。
也許等 C++0x(呃,可能會變成 C++1X) 釋出之後,可以帶給我們更複雜的 C++ 吧。XD

3 則留言:

  1. 再複雜下去我覺得會沒人想用 C++ 了 XD
    我學到現在的問題就是,到底是那種人會想學 C++ XD?

    回覆刪除
  2. Java 是它的 framework 很複雜, C++ 是自己就超複雜 XD

    回覆刪除
  3. 我剛學 C++ 之後學 Java ,一直有一種 Java 是玩具的錯覺 ... XD

    回覆刪除