Tôi có một số câu hỏi liên quan đến mẫu singleton như được ghi lại tại đây: http://msdn.microsoft.com/en-us/library/ff650316.aspx
Đoạn mã sau là một đoạn trích từ bài báo:
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;
}
}
}
Cụ thể, trong ví dụ trên, có cần phải so sánh instance với null hai lần, trước và sau khóa không? Điều này có cần thiết không? Tại sao không thực hiện khóa trước và thực hiện so sánh?
Có vấn đề gì trong việc đơn giản hóa những điều sau không?
public static Singleton Instance
{
get
{
lock (syncRoot)
{
if (instance == null)
instance = new Singleton();
}
return instance;
}
}
Việc thực hiện khóa có đắt không?