使用惰性初始化的Singleton
(Meyer‘Singleton)线程的以下实现是否安全?
static Singleton& instance()
{
static Singleton s;
return s;
}
如果不是,为什么以及如何使其线程安全?
发布于 2009-11-03 03:38:38
看看下一个标准(第6.7.4节),它解释了静态本地初始化是如何实现线程安全的。因此,一旦这部分标准被广泛实现,Meyer的Singleton将是首选的实现。
我已经不同意很多答案了。大多数编译器已经通过这种方式实现了静态初始化。一个值得注意的例外是Microsoft Visual Studio。
发布于 2009-11-03 00:37:02
正如MSalters所说:这取决于您使用的C++实现。请查看文档。至于另一个问题:“如果不是,为什么?”-- C++标准还没有提到任何关于线程的内容。但即将发布的C++版本支持线程,并且明确声明静态局部变量的初始化是线程安全的。如果两个线程调用这样的函数,其中一个线程将执行初始化,而另一个线程将阻塞并等待其完成。
https://stackoverflow.com/questions/1661529
复制相似问题