在C++模型不存在时,java模型需要对单个修改顺序的硬件支持吗? java模型需要硬件支持单修改顺序,而C++模型不?
我写了一个有四个线程的程序 t0设置x=新。。 t1设置x=新。。 t2:读取x两次,t3读取x两次 t2和t3可以看到x的不同顺序的变化吗 在c++11中,这是一个未定义的竞赛结果 在java中,这也是一场竞赛,但对所发生的事情有限制 对于许多CPU来说,有一个单一的修改顺序规则-使用硬件强制将对x的更改中的一个更改排在所有观察者的第二位-在C++模型不存在时,java模型需要对单个修改顺序的硬件支持吗? java模型需要硬件支持单修改顺序,而C++模型不?,java,c++,memory-model,Java,C++,Memory Model,我写了一个有四个线程的程序 t0设置x=新。。 t1设置x=新。。 t2:读取x两次,t3读取x两次 t2和t3可以看到x的不同顺序的变化吗 在c++11中,这是一个未定义的竞赛结果 在java中,这也是一场竞赛,但对所发生的事情有限制 对于许多CPU来说,有一个单一的修改顺序规则-使用硬件强制将对x的更改中的一个更改排在所有观察者的第二位- 如果在硬件中不支持这个,T2是垃圾回收器——java是否有任何声明? < P>在没有显式同步的情况下,同步块、锁、原子变量的使用——T2和T3可以看到ja
如果在硬件中不支持这个,T2是垃圾回收器——java是否有任何声明? < P>在没有显式同步的情况下,同步块、锁、原子变量的使用——T2和T3可以看到java和C++中不同顺序的变化。是。@user2129444是否是安全漏洞取决于具体情况。但是,程序员可以而且通常应该通过使用适当的显式同步来避免这种情况。Java有自己的独立于底层操作系统和硬件的功能。Java有自己的内存模型保证。然而,如果底层操作系统和硬件有更严格的保证,Java通常会继承这些保证。这听起来可能是一件好事,但实际上并非如此:这意味着如果你在更严格的硬件上编程,事情可能看起来运行得很好,但当你试图在保证更少的硬件上运行程序时,事情就破裂了。