我有一个关于静态库(.a/.lib)中的单例行为的问题。
class MySingleton {
public:
static
MySingleton&
GetInstance() {
static MySingleton singleton;
return singleton;
}
private:
explicit
MySingleton() {}
virtual
~MySingleton() {}
};
如果使用静态库,如何确保在OS级别上只有一个MySingleton?
如您所知,静态库在内存中有多个拷贝。这些拷贝是相互干扰还是完全不相关?意思是如果您有app1和app2,app1是否有一个MySingleton,而app2也有一个MySingleton?
您如何满足一旦app1启动并消耗MySingleton的要求,即使app2拥有另一个静态库拷贝,app2也没有机会创建另一个MySingleton。
最佳答案
在操作系统级别,除了共享库之外,进程不共享任何内存。
进程A将具有您自己的单例实例,而进程B将具有完全不同的单例实例,并且两个进程彼此隔离。
如果您想要任何涉及多个进程的逻辑,请按照共享库/共享内存的思路进行思考。