1. 程式人生 > >關於並發可見性的一點理解

關於並發可見性的一點理解

ava ima 深入理解 補充 並發編程 緩存 png java mage

技術分享

在看 《深入理解計算機系統》(CSAPP)第6章存儲器層次結構 的時候突然想到在java並發編程 中的 可見性的問題,在這裏簡單記錄一下,也不一定正確 ^_^

我們從上面的圖中可以看到Intel Core i7 中有4核,每一個核心中都有獨立的L1 L2 高速緩存, 四個核心共享L3高速緩存。

假設L1 L2高速緩存在數據寫的時候采用的是寫回的策略,簡單來說就是僅僅更新高速緩存中的數據,這有在根據替換策略這條數據將要被新數據替換的時候才寫回到更低層次的存儲器中。

那麽現在有這樣的場景: 每一核中都運行著一個線程,而這些線程共享同一變量a,如果線程0(運行在核0)對變量a執行寫操作,那麽從圖中我們可以看到僅僅會更改核0中的L1高速緩存,另外三個核上運行的線程在寫回操作(準確的說是 核0需要至少寫回到L3,而另外三個核重新從L3讀)前是不會看到這次寫操作的,這就是並發編程中的寫可見性問題。

以上這是暫時的理解,留作記錄以後補充。

關於並發可見性的一點理解