老鸟一般用 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
本文探讨了C++中经典的双检锁(Double-Checked Locking)模式在C++11之前的问题,并展示了如何使用C++11的原子操作和互斥锁实现更安全的单例模式。随着标准库的更新,现在的实现变得更加简洁高效。文章通过代码示例展示了最新的实现方式。
3万+

被折叠的 条评论
为什么被折叠?



