共享DLL中是否可以有多个单例实例?

时间:2010-04-13 06:28:00

标签: c++ dll singleton

我将为MFC应用程序开发一个DLL,并假设我在这个DLL中有一个带有一些同步机制的单例类。此DLL由其他进程使用,即EXE。问题是:这个单例是否只为所有共享进程创建一次,或者每个进程都有自己的单例?

如何解决这个多重单身人士问题?

3 个答案:

答案 0 :(得分:2)

我想你在谈论Windows。在这种情况下,每个进程都有自己的单例。您可以将它放在共享内存中,并使用命名同步原语在进程之间共享单例。

答案 1 :(得分:0)

如果基于单例模式,它将最终成为每个进程一个单例。请注意,如果在该进程中运行多个线程,则仍然只有一个单例。

答案 2 :(得分:0)

这取决于。默认情况下,DLL中的所有数据都是非共享的,并且所有代码都是共享的。但是通过使用#pragma section ("SharedSingleton", read, write, shared),您可以创建名为“SharedSingleton”的数据部分,该部分在DLL的所有用户之间共享。

请注意, 会带来安全隐患!您可能遇到的另一个棘手的问题是单例的初始化; C ++并不真正理解共享部分的概念。