确保单例模式的 C++ 实现可以被多线程安全地使用,可以使用如下代码:
#include <mutex>
class Singleton {
public:
static Singleton& GetInstance() {
static Singleton instance;
return instance;
}
private:
Singleton() = default;
~Singleton() = default;
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
static std::mutex mutex_;
};
std::mutex Singleton::mutex_;
这样的话,每次调用 GetInstance 时都会对互斥量加锁,以保证线程安全。
请注意,在 C++11 之前的版本中,这种写法是不可行的,因为静态变量的初始化顺序是未定义的。在 C++11 之后,通过使用 std::call_once
来实现线程安全的单例模式是更好的方法。