C# 정적 생성자의 스레드 안전성
C#에서 정적 생성자는 클래스 인스턴스가 생성되거나 정적 멤버에 액세스되기 전에 애플리케이션 도메인당 한 번만 실행됩니다. 이렇게 하면 초기 생성 시 스레드로부터 안전하므로 싱글톤 개체 생성 중에 잠금 및 Null 테스트가 필요하지 않습니다.
그러나 이후 인스턴스 사용은 동기식이 아닐 수 있습니다. 이 문제를 해결하려면 정적 뮤텍스를 추가하여 인스턴스에 대한 액세스를 동기화하는 것이 좋습니다.
다음은 뮤텍스 잠금을 포함하는 스레드로부터 안전한 싱글톤 구현의 예입니다.
<code class="language-c#">public class Singleton { private static Singleton instance; private static System.Threading.Mutex mutex = new System.Threading.Mutex(); // 初始化互斥锁 private Singleton() { } public static Singleton Instance { get { mutex.WaitOne(); try { if (instance == null) { instance = new Singleton(); } return instance; } finally { mutex.ReleaseMutex(); } } } }</code>
이 구현에서는 Instance
속성을 사용하여 싱글톤 인스턴스에 대한 액세스를 동기화하여 모든 후속 사용 시나리오에 대해 스레드로부터 안전한 작업을 보장합니다. get
접근자 내에서 try...finally
블록을 사용하면 예외가 발생하더라도 뮤텍스가 올바르게 해제되도록 할 수 있습니다. 이는 원래 예제의 Acquire()
및 Release()
메서드보다 더 깨끗하고 안전합니다.
위 내용은 C# 정적 생성자와 싱글톤 패턴을 사용하여 스레드 안전을 보장하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!