ここに記載されているシングルトン パターンに関していくつか質問があります: http://msdn.microsoft.com/en-us/library/ff650316.aspx
次のコードは記事からの抜粋です。
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;
}
}
}
具体的には、上記の例では、ロックの前後でインスタンスを null と 2 回比較する必要がありますか? これは必要ですか?最初にロックを実行して比較してみませんか?
次のように簡略化することに問題はありますか?
public static Singleton Instance
{
get
{
lock (syncRoot)
{
if (instance == null)
instance = new Singleton();
}
return instance;
}
}
ロックの実行には費用がかかりますか?