gpt4 book ai didi

c# - 为什么没有Volatile.Read(ref T location)where T : struct?

转载 作者:行者123 更新时间:2023-12-03 13:17:03 27 4
gpt4 key购买 nike

对于所有基元和引用类型都有Volatile.Read方法,为什么没有针对结构的Volatile.Read?同样适用于Volatile.Write。同样,旧的Thread.VolatileRead方法也没有一个用于结构。

这背后的原因是什么?我可以在一个类中声明 volatile 结构,为什么我不能使用这些方法进行 volatile 读取?

最佳答案

如果 volatile 操作也是原子的,则只能保证,这不是所有情况,而是最简单的结构(例如,原始或引用类型的一个字段,或适合64位/8字节的任何结构)。

例如,对于768位/96字节结构的Volatile方法,您会有什么期望?大于最大支持的原子操作的任何内容实际上都将导致多个 volatile 写入,每个写入都将立即可见,而无任何保证。

在Microsoft .NET实现中,长和双Volatile方法是原子的。即使在32位体系结构上,也要在此类体系结构中使用互锁操作。

关于c# - 为什么没有Volatile.Read(ref T location)where T : struct?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42740976/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com