C++ 单处理器上的单写入程序内存可见性保证

C++ 单处理器上的单写入程序内存可见性保证,c++,multithreading,C++,Multithreading,假设一个线程执行stop(),多个线程执行run() 我相信这种构造(一个编写器,没有同步原语)在嵌入式系统中非常普遍。假设没有多个处理器/内核,这能保证工作吗 谢谢,因为在unicore机器上只有一个CPU和一个CPU缓存 另一个原因:对于CPU来说,看起来只有一个线程在运行。CPU必须向应用程序提供一个相当于单线程执行的内存视图,因为CPU甚至不能判断是否有多个线程。是的,因为在unicore机器上只有一个CPU和一个CPU缓存 另一个原因:对于CPU来说,看起来只有一个线程在运行。CPU有

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

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


谢谢,因为在unicore机器上只有一个CPU和一个CPU缓存


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

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


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

不,代码中没有设置内存障碍,因此编译器可以自由地对易失性访问和非易失性访问重新排序,这可能会导致不正确的行为。”volatile与多线程几乎没有关系,有关更多信息,请参阅


此外,如果这是一个单CPU平台或多CPU平台,则这与此无关。如果代码正确,则“随发布存储”将通过缓存一致性协议传播到其他CPU/线程,一切都将正常。

否,代码中没有设置内存障碍,因此,编译器可以自由地将易失性访问与非易失性访问重新排序,这可能会导致错误的行为。”volatile与多线程几乎没有关系,有关更多信息,请参阅

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