我听过和读过很多关于 C++ 中的单例实现方法,例如 Meyer、Phoenix 等,但它们在某些使用场景中似乎都有问题。所以我想出了我自己的实现方法,Daniel Singleton。我想知道它是否正确......我认为是,但请告诉我它是否有我没有想到的缺陷!
此外,我试图通过使用双重检查锁定使其成为线程安全的,而不需要一直获取锁,我也读了很多关于它的文章,每个人都说它已经坏了。我也试图解决这个问题,我想知道我的解决方案是否正确......如果不是,那么它怎么会失败?
我听过和读过很多关于 C++ 中的单例实现方法,例如 Meyer、Phoenix 等,但它们在某些使用场景中似乎都有问题。所以我想出了我自己的实现方法,Daniel Singleton。我想知道它是否正确......我认为是,但请告诉我它是否有我没有想到的缺陷!
此外,我试图通过使用双重检查锁定使其成为线程安全的,而不需要一直获取锁,我也读了很多关于它的文章,每个人都说它已经坏了。我也试图解决这个问题,我想知道我的解决方案是否正确......如果不是,那么它怎么会失败?
单例模式本身就被破坏了,因为它产生了可怕的代码。使用依赖注入/控制反转确实要好得多。请参阅我关于避免单身人士的页面。
你的单例类是不必要的复杂。看起来您正在实现惰性单例模式,并且您仍在获取锁,所以 - 除了使事情变得不必要的复杂 - 我不确定您所做的与更简单的惰性单例实现有何不同。您是否对您的实现进行了基准测试以确定它是否比更简单的替代方案更快?我希望看到与更复杂的东西一起获得明显的性能胜利。
双重检查锁定模式类似于 ascii 和 IEE754 浮点数。假设它在您将看到的每个系统上都运行良好是相当安全的,即使它没有正式保证。