在.NET中进行双重检查锁定我在本文中讨论了为什么在Java中打破了双重检查锁定范例的原因。如果声明变量,范例是否对.NET(特别是C#)有效volatile?
3 回答
qq_花开花谢_0
TA贡献1835条经验 获得超7个赞
在C#中实现Singleton模式在第三个版本中讨论了这个问题。
它说:
使实例变量volatile可以使其工作,显式内存屏障调用也是如此,尽管在后一种情况下甚至专家也无法准确地同意需要哪些障碍。我倾向于避免专家不同意什么是对的,哪些是错的!
作者似乎暗示双重锁定比其他策略更不可能工作,因此不应该使用。
慕码人8056858
TA贡献1803条经验 获得超6个赞
现在,双重检查锁定在Java和C#中工作(Java内存模型已更改,这是其中一种效果)。但是,你必须完全正确。如果你稍微搞砸了,你最终可能会失去线程的安全性。
正如其他答案所述,如果您正在实施单例模式,那么有更好的方法可以实现它。就个人而言,如果我处于需要在双重检查锁定和“每次锁定”代码之间做出选择的情况,我每次都要锁定,直到我得到真正的证据表明它导致了瓶颈。说到线程,一个简单而明显正确的模式是值得的。
- 3 回答
- 0 关注
- 629 浏览
添加回答
举报
0/150
提交
取消