단축 :싱글 구현
public class Singleton
{
static readonly Singleton instance = new Singleton();
public static Singleton Instance
{
get { return instance; }
}
protected Singleton() { }
}
을 :
public class Singleton
{
static Singleton instance;
static object obj = new object();
public static Singleton Instance
{
get
{
lock (obj)
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}
protected Singleton() { }
}
이처럼 구현에 문제가있을 수 있습니까? 첫 번째 구현에서와 마찬가지로 매우 초기에 게으른 초기화가 이루어 지므로 왜 이것이 인기있는 솔루션이 아닌지 궁금합니다. 이 잠금 상태가 필요 없습니다 및 필드가 컴파일러가
이의는 싱글 (안티) 패턴 자체에 대해 얘기하지 말자 몇 가지 최적화를 할 수있게된다 읽기 전용으로 표시되어 있으므로 그것은 빠르게도
하시기 바랍니다해야한다
Jon Skeet [C#의 단일 패턴 구현] (http://csharpindepth.com/Articles/General/Singleton.aspx)을 읽고 "제 4 버전 - 게으른 것은 아니지만 잠금을 사용하지 않고 스레드로부터 안전 " – dcastro
맛의 문제. 'Lazy'도 세 번째 패턴입니다. 첫 번째 예제는 잠금을 입력하기 전에 무효 * 확인도해야합니다. –
그런 식으로 구현하는 데는 아무런 문제가 없습니다 (백킹 필드를'readonly'로 선언해야합니다). 그러나 속성에 액세스 할 때가 아니라 클래스의 정적 메서드가 호출 될 때 객체가 만들어지기 때문에 첫 번째 버전만큼 게으르지 않습니다. –