Singleton* Singleton::instance() {
if (pInstance == 0) {
Lock lock;
if (pInstance == 0) {
Singleton* temp = new Singleton; // initialize to temp
pInstance = temp; // assign temp to pInstance
}
}
컴파일러가 중복 temp를 최적화하지 않는다고 가정합니다. 스레드 A가 Singleton 개체에 할당되고 구성되며이 개체는 temp에 의해 지정됩니다. 이제 A가 그 직후에 선점됩니다. 이제 스레드 B가 잠금을 가져 와서 안으로 들어가서 pInstance가 NULL인지 확인하십시오. 또한 Singleton 개체를 만들고 기존 포인터를 덮어 씁니다. 나는 지금 메모리 누수가있는 것 같아. 당신의 의견 것입니다 ? 전체 소스 코드는 여기입니다 : 코드 참조 : http://erdani.com/publications/DDJ_Jul_Aug_2004_revised.pdf멀티 스레드 환경에서 싱글 톤으로 구현 된 메모리 누수
다시 연결 한 기사를 읽으십시오. –