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