C#volatile双

C#volatile双,第1张

概述作为仅引用类型和一些原语(包括float,但不是double,我不知道为什么,我很高兴听到为什么)可以被声明为volatile,如果我在一个类中包装一个double,然后声明它作为volatile(如下所示),双重属性将“读写”线程与其他任何动作一样安全,还是应该仍然在锁定? public class MyThreadedClass{ volatile VolatileDouble vo 作为仅引用类型和一些原语(包括float,但不是double,我不知道为什么,我很高兴听到为什么)可以被声明为volatile,如果我在一个类中包装一个double,然后声明它作为volatile(如下所示),双重属性将“读写”线程与其他任何动作一样安全,还是应该仍然在锁定?
public class MyThreadedClass{    volatile VolatileDouble voldub;}public class VolatileDouble{    public double Double { get; set; }}
解决方法 为什么double不能被声明为volatile:它是64位,这使得它比x86上的字大小更多,这阻止了它在Cli中被声明为volatile,如果我记得正确的话.

使用您当前的答案,只有引用被视为不稳定的.这意味着内存模型将确保它始终使用最新的引用,但它仍然可以使用一个过时的值.

如果我是你,我会锁定,但另一种选择是使用Interlocked.ReadInterlocked.Exchange,与BitConverter.Int64BitsToDoubleBitConverter.DoubleToInt64Bits结合使用.您可以将其封装在VolatileDouble结构中. (我可能会使它成为一个结构体,而不是一个类.)

总结

以上是内存溢出为你收集整理的C#volatile双全部内容,希望文章能够帮你解决C#volatile双所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1250745.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存