Meyer 的 Singleton 实现以静态 Singleton& instance() 的形式呈现,引发了有关其单例功能的问题。
单例本质源于来自 static 关键字。局部变量的静态存储持续时间意味着整个程序中仅存在一个实例。
考虑以下等效伪代码(不是实际的 C 98 代码):
static bool __guard = false; static char __storage[sizeof(Singleton)]; Singleton& Instance() { if (!__guard ) { __guard = true; new (__storage) Singleton(); } return *reinterpret_cast<Singleton*&>(__storage); }
这大致封装了原始代码的行为
在实际的 C 11 实现中,每个线程都使用一个保护变量静态,充当线程的屏障。
两种实现都强制单例完整性,但在线程处理和代码复杂性方面有所不同。
迈耶的实现:
维基百科实现:
Meyer 的实现确实是一个 Singleton,因为静态存储持续时间阻止了多个实例化。两种实现之间的选择取决于具体的应用程序和多线程考虑。
以上是Meyer 的单例实现真的是单例吗?它与线程安全替代方案相比如何?的详细内容。更多信息请关注PHP中文网其他相关文章!