小编典典

为什么会存在易失性?

all

关键字有什么作用volatile?在 C++ 中它解决了什么问题?

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


阅读 73

收藏
2022-05-18

共1个答案

小编典典

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,优化器会认为循环是无用的(这家伙从不设置值!他疯了,摆脱那个代码!)我的代码将在没有获得信号量的情况下继续运行,从而导致以后出现问题。

2022-05-18