在C語(yǔ)言中,volatile
關(guān)鍵字用來(lái)告訴編譯器,變量的值可能會(huì)在意料之外被修改,從而禁止編譯器對(duì)該變量進(jìn)行優(yōu)化。特別是在多線程或者嵌入式系統(tǒng)中,volatile
關(guān)鍵字往往用于訪問(wèn)硬件寄存器或者共享內(nèi)存等場(chǎng)景。
volatile
關(guān)鍵字可以用在變量聲明之前,也可以在類型修飾符之后使用。下面是幾個(gè)使用volatile
關(guān)鍵字的例子:
volatile
關(guān)鍵字:volatile int flag;
volatile
關(guān)鍵字:int volatile flag;
volatile
關(guān)鍵字修飾指針類型:volatile int *ptr;
volatile
關(guān)鍵字修飾函數(shù)返回值:volatile int getValue();
需要注意的是,volatile
關(guān)鍵字只能保證編譯器不會(huì)對(duì)變量進(jìn)行優(yōu)化,但并不能保證線程安全性,如果需要保證線程安全,還需要使用其他的同步機(jī)制,如互斥鎖。
另外,volatile
關(guān)鍵字也可以用于修飾全局變量,但在多線程環(huán)境下,建議使用原子操作或者互斥鎖來(lái)保證線程安全性。