为什么挥发性存在?

施密茨

什么是volatile关键词呢?在C ++中,它可以解决什么问题?

就我而言,我从来没有故意需要它。

道格T.

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章