>백엔드 개발 >C++ >Meyers의 싱글톤은 스레드로부터 안전합니까?

Meyers의 싱글톤은 스레드로부터 안전합니까?

DDD
DDD원래의
2024-12-29 11:40:11443검색

Is Meyers' Singleton Thread-Safe?

Meyers의 싱글톤: 스레드 안전성 평가 및 향상

Meyers의 싱글턴 패턴 구현은 지연 초기화를 활용하지만 스레드 안전성은 그대로 유지됩니다. 걱정. 이 기사에서는 주어진 코드에서 스레드 안전성의 복잡성을 자세히 설명합니다.

static Singleton& instance()
{
     static Singleton s;
     return s;
}

C 11 및 그 이후

C 11에서 전역 개체의 지연 초기화는 표준 보장으로 인해 스레드로부터 안전합니다. 동시 초기화로 인해 완료될 때까지 대기하게 됩니다. GCC와 Visual Studio 모두 이 기능을 지원합니다.

따라서 C 11 이상 환경에서 Meyers의 싱글톤 구현은 스레드로부터 안전합니다.

C 03 및 이전 버전

C 03 이하에서는 제공된 코드가 스레드로부터 안전하지 않습니다. Meyers가 자신의 기사에서 설명했듯이 이중 검사 잠금 패턴은 특정 아키텍처의 경쟁 조건에 취약할 수 있습니다. 이러한 맥락에서 스레드 안전성을 달성하려면 인스턴스화 방법에 대한 전체 잠금을 권장합니다.

C 03 스레드 안전성 코드

여기에 대한 코드 수정이 있습니다. C 03 스레드 안전성:

static Singleton*& instance()
{
    static Singleton* s = nullptr;
    static std::mutex s_mutex;

    std::lock_guard<std::mutex> guard(s_mutex);
    if (!s)
        s = new Singleton;

    return s;
}

이 구현은 초기화 중에 액세스를 동기화하기 위해 뮤텍스를 사용하여 스레드를 보장합니다. 안전합니다.

위 내용은 Meyers의 싱글톤은 스레드로부터 안전합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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