정적 싱글톤 및 인스턴스()로 표시되는 Meyer의 싱글톤 구현은 싱글톤 기능에 대한 의문을 제기합니다.
싱글턴의 성격은 정적 키워드. 지역 변수에 대한 정적 저장 기간은 프로그램 전체에 하나의 인스턴스만 존재한다는 것을 의미합니다.
다음과 동등한 의사 코드를 고려하세요(실제 C 98 코드 아님).
static bool __guard = false; static char __storage[sizeof(Singleton)]; Singleton& Instance() { if (!__guard ) { __guard = true; new (__storage) Singleton(); } return *reinterpret_cast<Singleton*&>(__storage); }
이는 원본의 동작을 대략적으로 요약합니다. 구현.
실제 C 11 구현에서는 가드 변수는 각 정적에 사용되며 스레드에 대한 장벽 역할을 합니다.
두 구현 모두 싱글톤 무결성을 적용하지만 스레드 처리 및 코드 복잡성이 다릅니다.
메이어의 구현:
Wikipedia 구현:
Meyer의 구현은 다중 인스턴스화를 방지하는 정적 저장 기간으로 인해 실제로 싱글톤입니다. 두 가지 구현 중 선택은 특정 애플리케이션과 멀티스레딩 고려 사항에 따라 달라집니다.
위 내용은 Meyer의 싱글톤 구현은 진정한 싱글톤입니까? 스레드로부터 안전한 대안과 어떻게 비교됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!