关于C++单例
最近看到一个项目的log库 用的Boost的单例
而outString函数居然没加锁,他不怕再多线程里出毛病?但你说这么大的项目,搞了好多年了,这种显而易见的问题应该不会发生啊
我看Boost的单例的源码,并没有处理这个问题的代码
我感觉会出现这种问题
thread1
singleton<Log>::get_instance().outString("hello");
thread1
singleton<Log>::get_instance().outString("world");
首先当thread1调用 get_instance()时候 加锁 返回Log引用 解锁 开始调用Log.outString("hello")
在这同一时刻,thread2正好也调用了get_instance(),然后也获得了log对象的引用,然后调用了
Log.outString("world");
难道他不怕thread1在printf("hello")还没输出完...正好被thread2的printf给 搅乱?