C++多线程--线程安全的单例模式
0 引言
由于最近事情比较多,所以很久没有更新相应的专栏了。目前事情基本告一段落,重新恢复相应专栏的更新。
本文主要讲解在C++并发编程中如何实现线程安全的单例模式。本文主要由如下几部分构成
-
臭名昭著的double-check单例实现 四种线程安全的单例模式 单例模式使用中所带来的一些坑
1 double-check单例实现
本文从
中相应的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(); }
问题:为什么double-check模式是臭名昭著的?
主要由于resource_ptr初始化过程是非原子化的。上述代码在多线程场景下可能发生如下的过程
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
免费gpt-4-国内使用gpt-4