2011-05-13 81 views
3
 
Lib1[dll] 
{ 
class A 
{ 
static int i=0; 
} 
} 

Program1[exe] have reference to Lib1 
{ 
Class B 
{ 
    main() 
    { 
     A.i = 5; 
    } 
} 
} 

Program2 [exe] have reference to Lib1 
{ 
Class C 
{ 
    main() 
    { 
     A.i = 5; 
    } 
} 
} 

如果PROGRAM1和Program2中被同時執行時,是有可能,它們引用到LIB1的單個實例,並切換到艾在PROGRAM1靜態變量製成可用來Program2中反之亦然,加載同一實例

+0

哪個操作系統? – dthorpe 2011-05-13 18:10:06

回答

8

一般來說,不,你要求的是不可能的或推薦的。在大多數操作系統(Windows,Linux等)中,每個程序實例都在獨立於所有其他進程的獨立進程地址空間中運行。在某些情況下,可以在進程之間共享共享DLL的只讀可執行代碼,以減少總體內存消耗,但可寫數據對每個進程都是本地的。

您可以通過使用操作系統服務來明確設置可由多個進程訪問的共享內存區域,從而實現您的要求。在Windows中,可以通過使用所有參與者事先知道的名稱創建named shared memory objects來完成此操作。然後,您可以將該內存塊轉換爲結構類型,並在該內存區域中讀寫字段,並且具有該共享內存上的視圖的所有進程都將看到相同的數據。

由於多個進程併發運行,您還需要考慮如何更新共享內存區域中的數據。如果多個進程需要更新計數器字段或共享內存區域中的內容,那麼您需要圍繞讀取和寫入數據實現線程安全實踐,例如互鎖增量或使用命名互斥鎖對象作爲獨佔訪問鎖。

相關問題