C# 정적 생성자의 스레드 안전성
C#에서는 인스턴스 초기화 또는 클래스의 정적 멤버 액세스 전에 정적 생성자가 실행됩니다. 따라서 싱글톤 초기 구성의 스레드 안전성을 보장합니다.
초기시공은 안전합니다
제공된 싱글톤 구현은 잠금이나 Null 테스트에 의존하지 않으므로 이 초기 단계가 스레드로부터 안전함을 보장합니다.
인스턴스 접근 보안
그러나 이후 인스턴스 사용이 동기화된다는 보장은 없습니다. 이 문제를 해결하기 위해 다음과 같은 개선이 이루어질 수 있습니다:
<code class="language-csharp">public class Singleton { // 添加静态互斥锁以同步对实例的访问 private static System.Threading.Mutex mutex; private static Singleton instance; 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!