2013-09-30 35 views
0

如果我理解正確,易失性會導致內存障礙,使本地內存與主內存同步。這在多核心機器上非常有用。Java中的關鍵字volatile在單核機器上強制內存同步嗎?

當單核心機器上運行多線程應用程序時,這種內存同步會發生嗎?

+0

在單個CPU機器上,沒有什麼可以同步。在具有超線程的單核機器上,它會強制數據緩存,以便其他線程可以看到它。 –

回答

3

當單線程機器上運行多線程應用程序時,這種內存同步會發生嗎?

是的。當另一個線程正在訪問相同的volatile字段時,volatile會導致讀取和/或寫入內存屏障並確保「之前發生」關係。見this tutorial。它確保將對本地CPU高速緩存的更改寫入主內存,並且對主內存的更改會使任何CPU高速緩存頁都無效。

由於只有一個CPU高速緩存需要擔心,因此這對於單處理器盒來說並不重要。但是,重要的是要認識到volatile的「發生之前」保證仍然很重要。它們可以防止由於使用多個線程進行時間切片而導致的即使只有一個CPU也可能發生的競爭狀況。

1

當多線程應用程序在單核機器上運行時,這種內存同步會發生嗎?

是的。

+0

你是什麼意思?我不明白 – gomul

+2

@gomul - 他的意思是「是」。 –

+1

@格雷好編輯。 – CPerkins