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

.NET中的双重检查锁定
EN

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

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

EN

回答 4

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用户

发布于 2008-12-27 11:32:27

注意,在Java语言中(很可能在.Net中也是如此),对单例初始化的双重检查锁定是完全不必要的,也是不必要的。因为类只有在第一次使用时才会被初始化,所以所需的惰性初始化已经通过这个方法实现了;

代码语言:javascript
复制
private static Singleton instance = new Singleton();

除非您的Singleton类包含可能在首次使用Singleton实例之前访问的常量之类的内容,否则这就是您需要做的全部工作。

票数 10
EN

Stack Overflow用户

发布于 2015-04-14 04:05:59

我不明白为什么所有人都说双重检查锁定是不好的模式,但却不调整代码以使其正确工作。在我看来,下面的代码应该可以很好地工作。

如果有人能告诉我这段代码是否存在卡梅隆文章中提到的问题,请告诉我。

代码语言:javascript
复制
public sealed class Singleton {
    static Singleton instance = null;
    static readonly object padlock = new object();

    Singleton() {
    }

    public static Singleton Instance {
        get {
            if (instance != null) {
                return instance;
            }

            lock (padlock) {
                if (instance != null) {
                    return instance;
                }

                tempInstance = new Singleton();

                // initialize the object with data

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

https://stackoverflow.com/questions/394898

复制
相关文章

相似问题

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