staticSingletoninstance(){staticSingletons;returns;}
在这里先剧透一下,这个方案在C++11标准发布之前确实是线程不安全的,但是在C++11标准发布后这样的代码就没有线程安全问题了,这是为什么呢?我们就从Meyers的这个例子开始挖吧。
很多人的第一反应就是既然线程不安全,加个锁呗。请记住,锁是性能的绊脚石,遇到并发访问就加锁是个严重的陋习。对于这个单实例的例子来说,只有第一次的初始化是个写操作,需要用锁进行同步,后续的动作都是读操作,完全并发访问,并不需要锁,但是却都要被迫等锁,这就会造成潜在的性能问题,尤其时考虑到单实例对象的操作非常频繁的情况。对这个问题挖掘了一下就发现,实际上很多人都在挖这个问题,比如有人提出将“Double-CheckedLockingPattern(DCLP)”应用到单实例模式中,试图得到了一个既能解决多线程并发问题,也能尽量减少加锁开销的单实例实现方法。Meyers本人也在