>백엔드 개발 >C++ >C# 정적 생성자와 싱글톤 패턴을 사용하여 스레드 안전을 보장하는 방법은 무엇입니까?

C# 정적 생성자와 싱글톤 패턴을 사용하여 스레드 안전을 보장하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-16 11:52:58934검색

How to Ensure Thread Safety with C# Static Constructors and Singleton Pattern?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.