老鸟一般用 C++ and the Perils of Double-Checked Locking这篇文章,老外写的,加了注释如下:
http://labisart.com/blog/index.php/Home/Index/article/aid/227
比较沙雕的翻译如下:
http://labisart.com/blog/index.php/Home/Index/article/aid/227
自从C++11出来后,一切都变了,以前叫人家小甜甜,现在叫牛夫人:
std::atomic<Singleton*> Singleton::m_instance;
std::mutex Singleton::m_mutex;
Singleton* Singleton::getInstance() {
Singleton* tmp = m_instance.load();
if (tmp == nullptr) {
std::lock_guard<std::mutex> lock(m_mutex);
tmp = m_instance.load();
if (tmp == nullptr) {
tmp = new Singleton;
m_instance.store(tmp);
}
}
return tmp;
}
实际上现在是2021年,9年前的东西你应该更加熟悉,那么最简洁的方法就是:
http://labisart.com/blog/index.php/Home/Index/article/aid/227