首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET中的双重检查锁定

问.NET中的双重检查锁定
EN

Stack Overflow用户
提问于 2008-12-27 11:05:42
回答 8查看 56.4K关注 0票数 58

我偶然看到this的一篇文章,讨论为什么双重检查锁定范例在Java语言中被打破了。如果变量被声明为volatile,那么该范例对于.NET (特别是C#)是否有效

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2008-12-27 11:21:13

Implementing the Singleton Pattern in C#在第三版中谈到了这个问题。

上面写着:

使实例变量易失性可以让它工作,显式内存屏障调用也可以,尽管在后一种情况下,即使是专家也不能确切地同意需要哪些屏障。我倾向于避免专家不同意什么是对什么是错的情况!

作者似乎暗示,与其他策略相比,双重锁定不太可能奏效,因此不应使用。

票数 27
EN

Stack Overflow用户

发布于 2008-12-27 11:47:36

双重检查锁定现在可以在Java和C#中工作( Java内存模型改变了,这是其中一个效果)。然而,你必须让它完全正确。如果你把事情搞得一团糟,你很可能最终失去线程的安全性。

正如其他答案所述,如果您正在实现singleton pattern,那么有更好的方法来实现它。就我个人而言,如果我处于一种情况下,我必须在自己实现双重检查锁定和“每次锁定”代码之间做出选择,我会选择每次都锁定,直到我得到真正的证据表明它造成了瓶颈。当谈到线程时,一个简单且明显正确的模式是非常有价值的。

票数 79
EN

Stack Overflow用户

发布于 2010-05-26 07:46:38

.NET 4.0有一个新的类型:Lazy<T>,它消除了人们对错误模式的担忧。它是新的任务并行库的一部分。

请参阅MSDN并行计算开发人员中心:http://msdn.microsoft.com/en-us/concurrency/default.aspx

顺便说一句,.NET 3.5 SP1 available here有一个后端口(我相信它不受支持)。

票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/394898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档