> For the complete documentation index, see [llms.txt](https://chenxiaowei.gitbook.io/concurrency-with-modern-c/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://chenxiaowei.gitbook.io/concurrency-with-modern-c/mo-shi/6.0-chinese/6.4-chinese.md).

# 反模式

如果模式代表了最佳实践，那么反模式就代表经验教训，或者用\[Andrew Koenig]\(<https://en.wikipedia.org/wiki/Andrew_Koenig_(programmer))的话来说：“对于问题的糟糕描述，导致了糟糕的解决方案。”如果仔细阅读并发模式的文献，就会看到双重检查锁定模式。双重检查锁定模式的基本思想，简言之，以优化的方式对共享状态进行线程安全初始化，这种共享状态通常是[单例](https://en.wikipedia.org/wiki/Singleton_pattern)。我将双重检查锁定模式放在本书的案例研究一章中，以明确强调：使用双重检查锁定模式可能会导致未定义行为。双重检查锁定模式的问题，本质上可以归结为单例模式的问题。>

如果使用单例模式，必须考虑以下挑战:

* 单例对象是一个全局对象。基于这个事实，单例的使用在(大多数情况下)接口中是不可见的。其结果是在使用单例的代码中隐藏了一个依赖项。
* 单例对象是静态的，因此一旦创建就不会被销毁。它的生命周期和程序的生命周期相同。
* 如果类的静态成员(如单例)依赖于在另一个单元中定义的静态成员，则不能保证先初始化哪个静态成员，那么每个静态成员初始化失败的概率是50%。
* 当类的实例可以完成任务时，通常会使用单例。许多开发者使用单例来证明自己了解设计模式。
