1

对于以下 C++ 代码

volatile bool keepRunning = true;

void run() {
    while (keepRunning) {
        doSomeWork();
    }
}

void stop() {
    keepRunning = false;
}

假设一个线程执行 stop() 并且多个线程正在执行 run()

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

谢谢

4

2 回答 2

1

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

如果这是一个单 CPU 平台或多 CPU 平台,这也是无关紧要的,如果代码是正确的,那么 store-with-release 将通过缓存一致性协议传播到其他 CPU/线程,一切都会好起来的。

于 2012-05-10T12:29:20.543 回答
0

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

另一个原因:对 CPU 来说,看起来只有一个线程在运行。CPU 必须为应用程序提供一个内存视图,这相当于单线程执行,因为 CPU 甚至无法判断有多个线程。

于 2012-05-09T17:47:34.807 回答