问题
在设计模式中,有一个很经典的模式-单例模式,它可能是实现上最简单的模式,在代码中也经常使用,在单线程下,毫无疑问延迟化加载是比较常用的,但是在多线程条件下,单例模式的延迟加载可能就会出现一些问题。
如以下的代码:
T* GetInstance()
{
if (pInst == NULL)
{
pInst = new T;
}
return pInst;
本文探讨了在多线程环境下,C++单例模式延迟加载可能出现的问题,分析了经典双检查锁实现的潜在风险,原因是CPU的指令乱序执行可能导致对象未完全构造就被返回。解决方案是引入内存屏障或类似指令,确保线程安全。
问题
在设计模式中,有一个很经典的模式-单例模式,它可能是实现上最简单的模式,在代码中也经常使用,在单线程下,毫无疑问延迟化加载是比较常用的,但是在多线程条件下,单例模式的延迟加载可能就会出现一些问题。
如以下的代码:
T* GetInstance()
{
if (pInst == NULL)
{
pInst = new T;
}
return pInst;
1477
1222

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