我有一个关于静态库(.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将具有完全不同的单例实例,并且两个进程彼此隔离。

如果您想要任何涉及多个进程的逻辑,请按照共享库/共享内存的思路进行思考。

10-05 22:49