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

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

DDD
풀어 주다: 2024-12-29 11:40:11
원래의
422명이 탐색했습니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿