最近有同事提到了volatile關(guān)鍵字,所以感興趣就上網(wǎng)去學(xué)習(xí)了下,但是在網(wǎng)上看的云里霧里的,因?yàn)楹芏嗵佣际敲鞔_說明volatile的定義了,然后就各種給你講例子它應(yīng)該如何應(yīng)用到多線程中使用,我個(gè)人也寫了例子,程序運(yùn)行沒有實(shí)現(xiàn)出他們多線程的效果。不過看了很多帖子也花費(fèi)了很多時(shí)間,就做一個(gè)總結(jié)吧。
1:volatile的歷史
volatile誕生于單cpu核心時(shí)代,為保持兼容,一直只是針對(duì)編譯器的,對(duì)cpu無影響。
2:volatile在c/c++中的作用:
1.告訴編譯器不要將定義的變量優(yōu)化掉。
2.告訴編譯器總是從緩存取被修飾的變量值,而不是寄存器取值。
注釋:volatile針對(duì)的編譯器。很多帖子上升到內(nèi)存屏障,保證執(zhí)行亂序的高度了,你們幫忙吹牛逼不犯法么?
3:volatile的應(yīng)用場景:
(1)信號(hào)處理程序。
(2)與硬件打交道(嵌入式開發(fā))
(3)setjmp和longjmp(函數(shù)間跳轉(zhuǎn)關(guān)鍵字)
注釋:如果你搞嵌入式程序開發(fā)可以更多的關(guān)注一下,如果不是,沒有必要過多關(guān)注。他不會(huì)在多線程上對(duì)程序起到多么牛逼的好處,起碼我自己寫程序沒有。我的電腦是兩核的。不高,難道用8核的會(huì)有不一樣的效果?