为了账号安全,请及时绑定邮箱和手机立即绑定

在.NET中进行双重检查锁定

在.NET中进行双重检查锁定

Qyouu 2019-08-27 16:25:07
在.NET中进行双重检查锁定我在本文中讨论了为什么在Java中打破了双重检查锁定范例的原因。如果声明变量,范例是否对.NET(特别是C#)有效volatile?
查看完整描述

3 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

在C#中实现Singleton模式在第三个版本中讨论了这个问题。

它说:

使实例变量volatile可以使其工作,显式内存屏障调用也是如此,尽管在后一种情况下甚至专家也无法准确地同意需要哪些障碍。我倾向于避免专家不同意什么是对的,哪些是错的!

作者似乎暗示双重锁定比其他策略更不可能工作,因此不应该使用。


查看完整回答
反对 回复 2019-08-27
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

现在,双重检查锁定在Java和C#中工作(Java内存模型已更改,这是其中一种效果)。但是,你必须完全正确。如果你稍微搞砸了,你最终可能会失去线程的安全性。

正如其他答案所述,如果您正在实施单例模式,那么有更好的方法可以实现它。就个人而言,如果我处于需要在双重检查锁定和“每次锁定”代码之间做出选择的情况,我每次都要锁定,直到我得到真正的证据表明它导致了瓶颈。说到线程,一个简单而明显正确的模式是值得的。


查看完整回答
反对 回复 2019-08-27
  • 3 回答
  • 0 关注
  • 629 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信