Singleton* Singleton::instance() {
if (pInstance == 0) {
Lock lock;
if (pInstance == 0) {
Singleton* temp = new Singleton; // initialize to temp
pInstance = temp; // assign temp to pInstance
}
}
假设编译器没有优化冗余温度。 线程A进入并分配并构造了Singleton对象,该对象由temp指向。 现在A被抢先。 现在线程B获取锁,进入并检查pInstance是否为NULL。它也会创建Singleton对象并覆盖现有的指针。我想现在有一个内存泄漏。你有什么意见 ? 完整的数据源代码在这里: 代码参考:http://erdani.com/publications/DDJ_Jul_Aug_2004_revised.pdf单线程实现多线程环境的内存泄漏
请再次阅读您链接的文章。 –