【发布时间】:2015-04-19 10:58:00
【问题描述】:
(取自书中的代码:http://gameprogrammingpatterns.com/ by Robert Nystrom)
在上面的书中,作者提供了两种不同的方法来制作单例类:
第一个:
class FileSystem
{
public:
static FileSystem& instance()
{
// Lazy initialize.
if (instance_ == NULL) instance_ = new FileSystem();
return *instance_;
}
private:
FileSystem() {}
static FileSystem* instance_;
};
第二个:
class FileSystem
{
public:
static FileSystem& instance()
{
static FileSystem *instance = new FileSystem();
return *instance;
}
private:
FileSystem() {}
};
后来他说第二个是更合适的方法,因为它是线程安全的,而第一个不是。
是什么让第二个线程安全?
这两者在静态声明上有什么区别?
【问题讨论】:
标签: c++ multithreading design-patterns singleton