2010-04-13 108 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++並不真正理解共享節的概念。