2011-11-14 36 views

回答

4

如果您正在使用pthreads,則不需要 - volatile對於正確的同步既不必要也不足夠。如果你對全局變量的訪問被一個互斥體(或另一個同步原語)正確保護,那麼你可以簡單地將它們聲明爲普通變量。

0

有時候最好將數據聲明爲volatile(大多數情況下是原子操作並且由原子操作操作)。但使用同步機制(如互斥鎖,rwlocks等)來序列化對全局數據的訪問是非常重要的。使用volatile的真正原因很少見:當變量是例如一個整數,當你使用特殊的原子操作時。

您需要使用同步原語,例如,的緩存

-1

易失性只是告訴編譯器,而不是變量可以從外部的東西修改,所以它不應該做任何優化(跳過讀/寫,放入寄存器)。所以你應該總是聲明一個全局變量volatile,如果多線程要使用它。

0

我看到有人說當你使用pthreads時沒有必要這麼做。 我不知道pthread如何保護這種情況,但據我所知, 定義一個全局變量爲「volatile」,如果你在多線程環境中, 原因就像myrkos上面所說的,多線程環境是變量可以「外部」修改的情況。現代編譯做了比你想象的更多的優化,如果它認爲變量沒有被修改, 會使代碼不從內存讀取值,但是在這樣的env中變量可能會改變。

但是,使全局變量運行良好還不夠,您需要使用自動操作或 互斥鎖來保護它。

相關問題