gpt4 book ai didi

android - 我的单例可以被多次调用

转载 作者:IT老高 更新时间:2023-10-28 12:43:32 25 4
gpt4 key购买 nike

我已经实现了一个基于 c++ 11 的单例。但是在某些情况下可以多次调用构造函数。

该类将被编译为静态库和由其他so lib(多个so lib)使用。并且系统是多线程系统(运行在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

问题:

  1. 我的单例设计有什么问题吗?这是线程安全的问题吗?

  2. 似乎我的单例在一个范围内工作正常,但每个所以包含我的单例的 lib 将创建自己的单例,这样我的单例不再是“成为单例”。是每个问题引起的动态链接到新的so并且“静态变量”变成“本地静态”?可能吗?如果是,如何解决?

最佳答案

  1. Anything wrong with my singleton design? Is it a thread-safe issue?

没有。标准保证函数局部static变量的初始化是线程安全的。

  1. Seems like my singleton works fine in one so scope, but each so lib which include my singleton will create its own singleton, so that my singleton is no longer “be a singleton”. Is the problem caused from each dynamic linking to new so and the "staic veriable" become "local static"? Is it possible? If so, how to fix

这是正确的结论。

不要创建包含单例实现的静态库,而是将其设为动态库。

关于android - 我的单例可以被多次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55467246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com