单处理器上的单写入器内存可见性保证

Single writer memory visibility guarantee on single processor

本文关键字:可见性 内存 单写入 单处理器      更新时间:2023-10-16

对于下面的C++代码

volatile bool keepRunning = true;
void run() {
    while (keepRunning) {
        doSomeWork();
    }
}
void stop() {
    keepRunning = false;
}

假设一个线程执行 stop(),多个线程执行 run()

我相信这种结构(一个编写器,没有同步原语)在嵌入式系统中非常普遍。假设没有多个处理器/内核,这是否保证有效?

谢谢

否,代码中不会施加内存屏障,因此编译器可以自由地使用非易失性访问重新排序易失性访问,这可能会导致不正确的行为。"易失性"与多线程关系不大,有关更多信息,请查看 Arch Robisoon 的博客文章。

如果这是单个 CPU 平台或多个 CPU 平台,这也无关紧要,如果代码正确,则存储发布将通过缓存一致性协议传播到其他 CPU/线程,一切都会很好。

是的,因为在单核机器上只有一个 CPU 和一个 CPU 缓存。

另一个原因:对于 CPU,看起来只有一个线程在运行。CPU 有义务向应用程序提供等效于单线程执行的内存视图,因为 CPU 甚至无法分辨出有多个线程。