我将为MFC应用程序开发一个DLL,并假设我在这个DLL中有一个带有一些同步机制的单例类。此DLL由其他进程使用,即EXE。问题是:这个单例是否只为所有共享进程创建一次,或者每个进程都有自己的单例?
如何解决这个多重单身人士问题?
答案 0 :(得分:2)
我想你在谈论Windows。在这种情况下,每个进程都有自己的单例。您可以将它放在共享内存中,并使用命名同步原语在进程之间共享单例。
答案 1 :(得分:0)
如果基于单例模式,它将最终成为每个进程一个单例。请注意,如果在该进程中运行多个线程,则仍然只有一个单例。
答案 2 :(得分:0)
这取决于。默认情况下,DLL中的所有数据都是非共享的,并且所有代码都是共享的。但是通过使用#pragma section ("SharedSingleton", read, write, shared)
,您可以创建名为“SharedSingleton”的数据部分,该部分在DLL的所有用户之间共享。
请注意, 会带来安全隐患!您可能遇到的另一个棘手的问题是单例的初始化; C ++并不真正理解共享部分的概念。