关键字有什么作用volatile?在 C++ 中它解决了什么问题?
volatile
就我而言,我从来没有故意需要它。
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,优化器会认为循环是无用的(这家伙从不设置值!他疯了,摆脱那个代码!)我的代码将在没有获得信号量的情况下继续运行,从而导致以后出现问题。