- 主题:cpp为什么要把原子指令和memory_order搅和在一起
明明是两件不直接搭嘎的事
--
FROM 61.48.14.*
此言缘何而来?
--
FROM 221.218.160.*
【 在 z16166 的大作中提到: 】
: 此言缘何而来?
比如atomic_load, 无论任何memory_order都不影响这一块内存本身的语义, 完全可以把memory_order拆出来
--
FROM 61.48.14.*
atomic_load不是有重载,
一个是easy api,固定用串行化的order
一个是expert api,码农可以指定order
嫌麻烦或者无需求的,用easy api不就行了。
expert api留给有进一步的细粒度控制需求的人。
这样不是很好吗
【 在 stub 的大作中提到: 】
: 比如atomic_load, 无论任何memory_order都不影响这一块内存本身的语义, 完全可以把memory_order拆出来
--
FROM 221.218.160.*
因为atomic的本质就是order
【 在 stub 的大作中提到: 】
: 明明是两件不直接搭嘎的事
--
FROM 176.93.89.*
【 在 philbloo 的大作中提到: 】
: 因为atomic的本质就是order
:
并没有,atomuc指令可以指定各种内存序 这些内存序同样有专门的指令,不需要绑定原子变量
--
FROM 223.160.131.*
因为本质是sequential consistency
用软件的semantics来解释这个问题是缘木求鱼 你得从处理器和内存的角度来看
【 在 stub 的大作中提到: 】
: 并没有,atomuc指令可以指定各种内存序 这些内存序同样有专门的指令,不需要绑定原子变量
--
FROM 176.93.89.*
【 在 philbloo 的大作中提到: 】
: 因为本质是sequential consistency
: 用软件的semantics来解释这个问题是缘木求鱼 你得从处理器和内存的角度来看
:
如果原子指令本身是有比如aqurie release等语义,那么到底是什么语义呢,假如指令本身是sc语义,那么指定relax内存序有什么意义呢
--
FROM 223.160.131.*
这里的问题,我认为本质上是软件(软件程序员)用什么办法定义program order,使其可见效果不违背本意。所以ll/sc这类primitives就是给你定义program order的。
要展开来说我也没那能力,因为要扯到arch上才行,比如store buffer,pipeline等等等等。但我觉得这方面的知识必须多少得看一些,不然一辈子也想不明白。其实不用投入多少时间,花大半年看几本书,就一劳永逸了
【 在 stub 的大作中提到: 】
: 如果原子指令本身是有比如aqurie release等语义,那么到底是什么语义呢,假如指令本身是sc语义,那么指定relax内存序有什么意义呢
--
FROM 85.76.38.*
【 在 philbloo 的大作中提到: 】
: 这里的问题,我认为本质上是软件(软件程序员)用什么办法定义program order,使其可见效果不违背本意。所以ll/sc这类primitives就是给你定义program order的。
: 要展开来说我也没那能力,因为要扯到arch上才行,比如store buffer,pipeline等等等等。但我觉得这方面的知识必须多少得看一些,不然一辈子也想不明白。其实不用投入多少时间,花大半年看几本书,就一劳永逸了
:
我开始也以为原子指令本身就是sc语义,但是后来发现,这与cpp中的内存序语义相悖,也就是我前面的反证,你也没有解释清这个反证,其实就是假设原子指令是某一种内存序,那么必然与别的内存序相悖
--
FROM 223.160.131.*