比较两种阶级财产抗辩方式(A & B):
// 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;
}
}
}和
// 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) {
....
}问题:
既然“缓存”将用作静态实例,那么A&B线程中的"SyncRoot“创建是否都是安全的?
发布于 2016-03-25 06:19:28
是的,这两个创建都是线程安全的。区别在于实现B,SyncRoot对象是在创建Cache实例时创建的。在A中,当访问SyncRoot时会创建它。
https://stackoverflow.com/questions/36214449
复制相似问题