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

(C#)类成员初始化线程安全问题,c#,static,thread-safety,C#,Static,Thread Safety,比较两种类别财产抗辩方式(A和B): 及 最后是一些使用缓存的地方: static Cache MyCache = new Cache(); // I don't know if this kind of declaration is thread-safe either lock (MyCache.SyncRoot) { .... } 问题: 由于“缓存”将用作静态实例,[A]&[B]中的“SyncRoot”创建是否都是线程安全的 是的,这两个创建都是线程安全的。不同之处在于实现B

比较两种类别财产抗辩方式(A和B):

最后是一些使用缓存的地方:

static Cache MyCache = new Cache(); //  I don't know if this kind of declaration is thread-safe either
lock (MyCache.SyncRoot) {
    ....
}
问题:


由于“缓存”将用作静态实例,[A]&[B]中的“SyncRoot”创建是否都是线程安全的

是的,这两个创建都是线程安全的。不同之处在于实现
B
,创建
Cache
实例时创建
SyncRoot
对象。在
A
中,访问时将创建
SyncRoot

// implemention B.
public class Cache {
    public object SyncRoot { get; } = new object(); // in C# 6.0
}
static Cache MyCache = new Cache(); //  I don't know if this kind of declaration is thread-safe either
lock (MyCache.SyncRoot) {
    ....
}