2010-04-13 107 views
0

我打算为MFC应用程序开发一个DLL,并且假设我在这个DLL中有一个单例类,并带有一些同步机制。而这个DLL被其他进程使用,即EXE。问题是:这个单例只为所有共享过程创建一次,还是每个过程都有它自己的单例?共享DLL中有多个单例实例吗?

而我该如何解决这个多重单例问题?

+0

一个可能的想法:http://stackoverflow.com/questions/783623/boost-shared-memory-and-vectors – 2010-04-13 06:50:46

回答

2

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

0

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

0

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

请注意,这确实引入安全隐患!您可能遇到的另一个麻烦问题是单例的初始化; C++并不真正理解共享节的概念。