首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(C#)类成员初始化线程安全问题

(C#)类成员初始化线程安全问题
EN

Stack Overflow用户
提问于 2016-03-25 05:18:33
回答 1查看 31关注 0票数 0

比较两种阶级财产抗辩方式(A & B):

代码语言:javascript
复制
// implemention A
public class Cache {
    private object m_syncRoot = null;
    public object SyncRoot {
        get {
            if (m_syncRoot == null) {
                Interlocked.CompareExchange(ref m_syncRoot, new object(), null);            
            }
            return m_syncRoot;
        }
    }
}

代码语言:javascript
复制
// implemention B.
public class Cache {
    public object SyncRoot { get; } = new object(); // in C# 6.0
}

最后,有些地方使用缓存:

代码语言:javascript
复制
static Cache MyCache = new Cache(); //  I don't know if this kind of declaration is thread-safe either
lock (MyCache.SyncRoot) {
    ....
}

问题:

既然“缓存”将用作静态实例,那么A&B线程中的"SyncRoot“创建是否都是安全的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-25 06:19:28

是的,这两个创建都是线程安全的。区别在于实现BSyncRoot对象是在创建Cache实例时创建的。在A中,当访问SyncRoot时会创建它。

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

https://stackoverflow.com/questions/36214449

复制
相关文章

相似问题

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