Meyers의 싱글톤 패턴 구현의 스레드 안전성
지연 초기화를 사용한 Meyers의 싱글톤 패턴 구현은 스레드 안전성에 대한 의문을 제기합니다.
마이어스의 싱글톤 구현
싱글턴 패턴에 제공되는 코드는 다음과 같습니다.
static Singleton& instance() { static Singleton s; return s; }
스레드 안전성 분석
C 11에서는 이 구현은 §6.7 [stmt.dcl]의 보장으로 인해 스레드로부터 안전합니다. p4:
"변수가 초기화되는 동안 제어가 선언을 동시에 입력하면 동시 실행은 초기화가 완료될 때까지 기다려야 합니다."
GCC(버전 4.3 이후) 및 Visual과 같은 컴파일러 Studio(2015년부터)에서 이 기능을 지원합니다.
C 03 구현
C 03에서는 코드가 스레드로부터 안전하지 않았습니다. Meyers의 기사 "C and the Perils of Double-Checked Locking"에서는 이러한 우려를 논의합니다. 동시성을 보장하기 위해 인스턴스화 방법에 대한 전체 잠금이 권장되는 반면, 이중 확인 잠금 변형은 메모리 장벽 없이 특정 아키텍처에서 경쟁 조건에 직면할 수 있습니다.
위 내용은 Meyers의 싱글톤 패턴은 C 11 이상에서 스레드로부터 안전합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!