日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
并發(fā)編程:volatile關(guān)鍵字,你學(xué)會(huì)了嗎?

一、64位寫入的原子性(Half Write)

如,對(duì)于一個(gè)long型變量的賦值和取值操作而言,在多線程場(chǎng)景下,線程A調(diào)用set(100),線程B調(diào) 用get(),在某些場(chǎng)景下,返回值可能不是100。

我們提供的服務(wù)有:成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、古城ssl等。為上千多家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的古城網(wǎng)站制作公司

因?yàn)镴VM的規(guī)范并沒有要求64位的long或者double的寫入是原子的。在32位的機(jī)器上,一個(gè)64位變 量的寫入可能被拆分成兩個(gè)32位的寫操作來執(zhí)行。這樣一來,讀取的線程就可能讀到“一半的值”。解決 辦法也很簡(jiǎn)單,在long前面加上volatile關(guān)鍵字。

二、重排序:DCL問題

單例模式的線程安全的寫法不止一種,常用寫法為DCL(Double Checking Locking),如下所示:

上述的 instance = new Singleton(); 代碼有問題:其底層會(huì)分為三個(gè)操作:

1. 分配一塊內(nèi)存。

2. 在內(nèi)存上初始化成員變量。

3. 把instance引用指向內(nèi)存。

在這三個(gè)操作中,操作2和操作3可能重排序,即先把instance指向內(nèi)存,再初始化成員變量,因?yàn)?二者并沒有先后的依賴關(guān)系。此時(shí),另外一個(gè)線程可能拿到一個(gè)未完全初始化的對(duì)象。這時(shí),直接訪問 里面的成員變量,就可能出錯(cuò)。這就是典型的“構(gòu)造方法溢出”問題。 解決辦法也很簡(jiǎn)單,就是為instance變量加上volatile修飾。

volatile的三重功效:64位寫入的原子性、內(nèi)存可見性和禁止重排序。

三、volatile實(shí)現(xiàn)原理

由于不同的CPU架構(gòu)的緩存體系不一樣,重排序的策略不一樣,所提供的內(nèi)存屏障指令也就有差 異。 這里只探討為了實(shí)現(xiàn)volatile關(guān)鍵字的語義的一種參考做法:

1. 在volatile寫操作的前面插入一個(gè)StoreStore屏障。保證volatile寫操作不會(huì)和之前的寫操作重 排序。

2. 在volatile寫操作的后面插入一個(gè)StoreLoad屏障。保證volatile寫操作不會(huì)和之后的讀操作重 排序。

3. 在volatile讀操作的后面插入一個(gè)LoadLoad屏障+LoadStore屏障。保證volatile讀操作不會(huì)和 之后的讀操作、寫操作重排序。

具體到x86平臺(tái)上,其實(shí)不會(huì)有LoadLoad、LoadStore和StoreStore重排序,只有StoreLoad一種 重排序(內(nèi)存屏障),也就是只需要在volatile寫操作后面加上StoreLoad屏障。

四、JSR-133對(duì)volatile語義的增強(qiáng)

在JSR -133之前的舊內(nèi)存模型中,一個(gè)64位long/ double型變量的讀/ 寫操作可以被拆分為兩個(gè)32位 的讀/寫操作來執(zhí)行。從JSR -133內(nèi)存模型開始 (即從JDK5開始),僅僅只允許把一個(gè)64位long/ double 型變量的寫操作拆分為兩個(gè)32位的寫操作來執(zhí)行,任意的讀操作在JSR -133中都必須具有原子性(即 任 意讀操作必須要在單個(gè)讀事務(wù)中執(zhí)行)。


新聞標(biāo)題:并發(fā)編程:volatile關(guān)鍵字,你學(xué)會(huì)了嗎?
文章網(wǎng)址:http://www.dlmjj.cn/article/cdoiphc.html