volatile關鍵字的理解,不能保證修改的原子性

voliate 關鍵字基於c++,以及更底層彙編實現,在線程對於本地內存中值修改完成,也就是assigh原子操做結束之後。c++

會立馬對內存中這個數據加鎖,也成爲內存屏障,這個時候經過mesi或者總線協議其餘線程中這個值就會失效,從而保證了修改的可見性。線程

可是若是其餘線程在此時已經修改了本地內存中這個值副本的值,可是還沒來得及assigh回去,這個時候這個修改就丟失了。內存

voliate關鍵字修飾的變量,發生修改,通常有四個階段:it

從主內存從讀取變量副本到本地內存 read load變量

而後是use assigh數據

此時lock主內存中數據協議

而後store write底層

其中 read load use assigh都不能保證原子性,只有最後寫入的時候能保證原子性。

相關文章
相關標籤/搜索