- 主题:大家来看看这个relaxed memory order
是的。讨论C/C++代码的话,是的。编译器在指令重排上的限制比任何CPU都更少。乱序CPU/多CPU会引发的问题,编译器在顺序单CPU上(至少理论上)也会引发。
讨论汇编代码的话,不是。超线程/多核/多CPU上的一些现象在单核上不会出现。
【 在 DoorWay 的大作中提到: 】
: 所以讨论这个问题,与CPU个数以及“L1缓存”这个术语,关系不大。
: 只引入三个抽象的线程对象,t1/t2/t3就可以了?就像楼主引用的文档里那样?
: 这么说合适不?
--
修改:ilovecpp FROM 114.86.90.*
FROM 114.86.90.*
谢谢。那我抓住了重点。
第二段汇编和超线程的知识,我以后有机会再了解。
【 在 ilovecpp 的大作中提到: 】
: 是的。讨论C/C++代码的话,是的。编译器在指令重排上的限制比任何CPU都更少。乱序CPU/多CPU会引发的问题,编译器在单CPU上(至少理论上)也会引发。
: 讨论汇编代码的话,不是。超线程/多核/多CPU上的一些现象在单核上不会出现。
--
FROM 1.86.17.*
你说得对,编译器优化最终以observable behavior而不是sequence point为依据。
不知道什么编译器会对这个搞天马行空的优化
if(x.load()==10)
{
y.store(10)
}
【 在 ilovecpp 的大作中提到: 】
: sequence point / sequencing限定的是单线程代码理论上(“在C++虚拟机上”)的运行过程,它从来不限制实际生成代码的运行过程。编译器生成的代码只需要和标准在单线程的“可观测行为”(i.e.库函数调用)上一致。极端的例子,编译器理论上可以把你算pi的前100位的程序生成为直接打印答案。
--
FROM 125.35.121.*