什么是volatile
关键词呢?在C ++中,它可以解决什么问题?
就我而言,我从来没有故意需要它。
volatile
如果要从内存中某个完全是独立的进程/设备/进行任何写入的位置读取数据,则需要使用此命令。
我曾经在直接C语言的多处理器系统中使用双端口ram。我们使用硬件管理的16位值作为信号量来了解其他人何时完成。本质上,我们这样做:
void waitForSemaphore()
{
volatile uint16_t* semPtr = WELL_KNOWN_SEM_ADDR;/*well known address to my semaphore*/
while ((*semPtr) != IS_OK_FOR_ME_TO_PROCEED);
}
如果不使用volatile
,则优化器将认为该循环是无用的(该家伙从未设置过该值!他真是疯了,摆脱了该代码!),我的代码将继续运行而没有获得信号量,从而在以后引起问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句