voliate 關鍵字基於c++,以及更底層彙編實現,在線程對於本地內存中值修改完成,也就是assigh原子操做結束之後。c++
會立馬對內存中這個數據加鎖,也成爲內存屏障,這個時候經過mesi或者總線協議其餘線程中這個值就會失效,從而保證了修改的可見性。線程
可是若是其餘線程在此時已經修改了本地內存中這個值副本的值,可是還沒來得及assigh回去,這個時候這個修改就丟失了。內存
voliate關鍵字修飾的變量,發生修改,通常有四個階段:it
從主內存從讀取變量副本到本地內存 read load變量
而後是use assigh數據
此時lock主內存中數據協議
而後store write底層
其中 read load use assigh都不能保證原子性,只有最後寫入的時候能保證原子性。