0
クラスのプロパティdefenition(& B)の2つの方法の比較:(C#)クラスメンバー初期化するスレッドの安全性の問題
// 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"の両方の作成はスレッドセーフですか?