싱글톤 모드에서 C# 정적 생성자의 스레드 안전성
싱글턴 패턴은 소프트웨어 개발의 일반적인 디자인 패턴으로, 애플리케이션 도메인에서 클래스의 인스턴스가 하나만 있도록 보장합니다. C#에서 정적 생성자는 싱글톤 구현의 인스턴스를 포함하여 클래스의 정적 멤버를 초기화하는 일을 담당합니다.
질문:
다음 C# 싱글톤 구현은 스레드로부터 안전합니까?
<code class="language-C#">public class Singleton { private static Singleton instance; private Singleton() { } static Singleton() { instance = new Singleton(); } public static Singleton Instance { get { return instance; } } }</code>
정답:
예, 이 구현의 정적 생성자는 싱글톤 인스턴스의 초기 생성 중에 스레드 안전성을 보장합니다. Microsoft 설명서에 따르면 C#의 정적 생성자는 클래스 인스턴스가 생성되거나 정적 멤버에 액세스되기 전에 각 응용 프로그램 도메인에서 한 번만 실행되도록 보장됩니다.
그러나 이 스레드 안전성은 인스턴스의 초기 구성에만 적용된다는 점에 유의하는 것이 중요합니다. 이후 인스턴스 사용이 동기화된다는 보장은 없습니다. 완전한 스레드 안전성을 보장하려면 추가 동기화 메커니즘이 필요합니다.
스레드 동기화를 달성하는 한 가지 방법은 싱글톤 인스턴스에 대한 액세스를 제어하기 위해 정적 뮤텍스를 도입하는 것입니다.
<code class="language-C#">public class Singleton { private static Singleton instance; private static System.Threading.Mutex mutex; private Singleton() { } static Singleton() { instance = new Singleton(); mutex = new System.Threading.Mutex(); } public static Singleton Acquire() { mutex.WaitOne(); return instance; } public static void Release() { mutex.ReleaseMutex(); } }</code>
이 구현에서는 Acquire()에 대한 각 호출이 Release()에 대한 호출과 쌍을 이루어 한 번에 하나의 스레드만 싱글톤 인스턴스에 액세스할 수 있도록 해야 합니다. 이 접근 방식을 사용하면 초기 생성 시뿐만 아니라 인스턴스의 후속 사용 중에도 스레드 안전성이 달성됩니다.
위 내용은 C#의 정적 생성자는 스레드로부터 안전한 싱글톤 구현에 충분합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!