using System;
public sealed class Singleton
{
private static volatile Singleton instance;
private static object syncRoot = new Object();
private Singleton() {}
public static Singleton Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
instance = new Singleton();
}
}
return instance;
}
}
}
なぜダブルチェックなのかわかりません!このダブルチェックはスレッドの同時実行性の問題を解決するためのものだと読みましたが...
ロックはそれを解決します-それで、なぜ最初に'if'をする必要があるのですか?
このシングルトンに最初の'がない場合'それでもスレッドセーフになります-そうですか?
最初の'if'がfalseの場合、thread1は'instance'オブジェクトを初期化します=>今、'instance'はnullではなく、thread1はまだロックブロックにあります=== >>今、thread2は最初の'をチェックしますif'and will get false =>したがって、彼は' lock'に到達せず、すぐにインスタンスを返し、thread2は'インスタンス'のプロパティを変更できます=>したがって、thread1&&thread2は同じ'インスタンスで'動作しています' 'object =>なので、スレッドセーフはどこにありますか...またはここで欠落しているものです。