C# 정적 생성자는 스레드로부터 안전합니까?
다음 싱글톤 구현을 고려해보세요.
<code class="language-csharp">public class Singleton { private static Singleton instance; private Singleton() { } static Singleton() { instance = new Singleton(); } public static Singleton Instance { get { return instance; } } }</code>
이 구현은 스레드로부터 안전합니까?
정답:
정적 생성자(예제 참조)는 클래스의 인스턴스가 생성되기 전이나 정적 멤버에 액세스하기 전 애플리케이션 도메인에서 한 번만 실행되도록 보장됩니다(https://www.php .cn /link/362c6840e40a65edd557a108c219f8f0).
따라서 싱글톤 인스턴스의 초기 구성은 스레드로부터 안전합니다. 즉, 잠금이나 Null 테스트가 필요하지 않습니다. 그러나 이는 싱글톤 개체가 동기 방식으로 사용될 수 있다는 것을 보장하지 않습니다.
싱글톤 인스턴스 사용의 동기화를 달성하려면 여러 가지 방법을 사용할 수 있습니다. 한 가지 방법은 다음과 같습니다.
<code class="language-csharp">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; } // 每次调用Acquire()都需要调用Release() public static void Release() { mutex.ReleaseMutex(); } }</code>
이 구현에서는 싱글톤 인스턴스에 대한 액세스를 동기화하기 위해 정적 뮤텍스를 도입합니다. 적절한 동기화를 보장하려면 각 인스턴스의 획득(Acquire())을 해제(Release())해야 합니다.
위 내용은 C#의 정적 생성자는 싱글톤 구현에 대해 스레드로부터 안전합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!