我已经基于C++11实现了一个单例模式。 但在某些情况下,构造函数可能会被多次调用。
该类将被编译为静态库,并由其他so库使用(超过一个so库)。 而且系统是一个多线程系统(在Android HAL级别运行)
/// .h文件:
class Logger
{
public:
/// Return the singleton instance of Logger
static Logger& GetInstance() {
static Logger s_loggerSingleton;
return s_loggerSingleton;
}
private:
/// Constructor
Logger();
/// Destructor
~Logger();
}
/// 这是 .cpp 文件
Logger::Logger()
{
ALOGE("OfflineLogger create");
}
Logger::~Logger()
{
}
应该只创建一次,例如:
03-21 01:52:20.785 728 4522 E : OfflineLogger create
然而,我可以看到它已经被创建了多次。
03-21 01:52:20.785 728 4522 E : OfflineLogger create
03-21 01:52:20.863 728 2274 E : OfflineLogger create
03-21 01:52:20.977 728 2273 E : OfflineLogger create
03-21 01:52:26.370 728 4522 E : OfflineLogger create
问题:
我的单例设计有什么问题吗?这是线程安全问题吗?
似乎我的单例在一个作用域中运行良好,但每个包含我的单例的so库将创建自己的单例,因此我的单例不再“成为单例”。这个问题是由于每次动态链接到新的so和“静态变量”变成“局部静态”引起的吗?如果是,如何解决?