0 引言
由于最近事情比较多,所以很久没有更新相应的专栏了。目前事情基本告一段落,重新恢复相应专栏的更新。
本文主要讲解在C++并发编程中如何实现线程安全的单例模式。本文主要由如下几部分构成
- 臭名昭著的double-check单例实现
- 四种线程安全的单例模式
- 单例模式使用中所带来的一些坑
1 double-check单例实现
本文从C++ Concurrency in Action (豆瓣)
中相应的double-check代码说起,其代码如下所示
void undefined_behaviour_with_double_checked_locking() {
if(!resource_ptr) {
std::lock_guard<std::mutex> lk(resource_mutex);
if(!resource_ptr) {
resource_ptr.reset(new some_resource);
}
}
resource_ptr->do_something();
}