C#放松了原子写操作(仅科学,发布保证较弱)?类似于Java的原子lazySet

时间:2018-11-26 14:19:14

标签: c#

据我所知,对C#易失性值的操作(直接或通过互锁)保证立即发布(例如,值永远不会存储在L1缓存中),并且在写入变量的情况下,创建完整的StoreLoad操作周围的内存障碍。

其他语言似乎允许稍微更好地调整原子控制-即C ++的std :: atomic允许指定std :: memory_order,而Java的原子类具有诸如LazySet(例如参见[1])或PutOrderedLong(例如例如[2]),它允许仅使用栅栏/ sfence加载/存储值,并且-我相信-无需立即发布易失性值的保证。 据我了解,例如,使用sfence / LazySet可以确保确实在保护项之前执行/存储了先行存储(sfence,no lfence),尽管并没有任何明确的保证何时会发生。

C#是否提供类似功能的任何功能?即一种仅使用一种信息执行原子写入的方式,是否有任何可能在什么时候可见的时间上有宽松的约束/保证?

谢谢!

[1] http://psy-lob-saw.blogspot.com/2012/12/atomiclazyset-is-performance-win-for.html

[2] http://robsjava.blogspot.com/2013/06/a-faster-volatile.html

0 个答案:

没有答案