- 主题:cpp为什么要把原子指令和memory_order搅和在一起
因为atomic的本质就是order
【 在 stub 的大作中提到: 】
: 明明是两件不直接搭嘎的事
--
FROM 176.93.89.*
因为本质是sequential consistency
用软件的semantics来解释这个问题是缘木求鱼 你得从处理器和内存的角度来看
【 在 stub 的大作中提到: 】
: 并没有,atomuc指令可以指定各种内存序 这些内存序同样有专门的指令,不需要绑定原子变量
--
FROM 176.93.89.*
这里的问题,我认为本质上是软件(软件程序员)用什么办法定义program order,使其可见效果不违背本意。所以ll/sc这类primitives就是给你定义program order的。
要展开来说我也没那能力,因为要扯到arch上才行,比如store buffer,pipeline等等等等。但我觉得这方面的知识必须多少得看一些,不然一辈子也想不明白。其实不用投入多少时间,花大半年看几本书,就一劳永逸了
【 在 stub 的大作中提到: 】
: 如果原子指令本身是有比如aqurie release等语义,那么到底是什么语义呢,假如指令本身是sc语义,那么指定relax内存序有什么意义呢
--
FROM 85.76.38.*
也许是我没看懂你的问题?atomic是利用memory order的primitive造出来的一个组件而已。换句话说,atomic是program order的一个instance 。不知道有没有回答你的问题?
【 在 stub 的大作中提到: 】
: 我开始也以为原子指令本身就是sc语义,但是后来发现,这与cpp中的内存序语义相悖,也就是我前面的反证,你也没有解释清这个反证,其实就是假设原子指令是某一种内存序,那么必然与别的内存序相悖
--
FROM 85.76.38.*