在多个进程中加载同一dll实例 Lib1[dll] { 甲级 { 静态int i=0; } } Program1[exe]引用了Lib1 { B类 { main() { A.i=5; } } } 程序2[exe]引用了Lib1 { C类 { main() { A.i=5; } } }

在多个进程中加载同一dll实例 Lib1[dll] { 甲级 { 静态int i=0; } } Program1[exe]引用了Lib1 { B类 { main() { A.i=5; } } } 程序2[exe]引用了Lib1 { C类 { main() { A.i=5; } } },dll,shared-memory,Dll,Shared Memory,如果Program1和Program2同时执行,它们是否可能引用Lib1的单个实例以及对Program1中a.i的静态变量所做的更改可供Program2和viceversa使用,一般来说,不,您所要求的是不可能的或不推荐的。在大多数操作系统(Windows、Linux等)中,每个程序实例都在一个独立的进程地址空间中运行,该地址空间与所有其他进程隔离。在某些情况下,共享DLL的只读可执行代码可以在进程之间共享,以减少总体内存消耗,但可写数据是每个进程的本地数据 通过使用OS服务显式设置可由多个进程

如果Program1和Program2同时执行,它们是否可能引用Lib1的单个实例以及对Program1中a.i的静态变量所做的更改可供Program2和viceversa使用,

一般来说,不,您所要求的是不可能的或不推荐的。在大多数操作系统(Windows、Linux等)中,每个程序实例都在一个独立的进程地址空间中运行,该地址空间与所有其他进程隔离。在某些情况下,共享DLL的只读可执行代码可以在进程之间共享,以减少总体内存消耗,但可写数据是每个进程的本地数据

通过使用OS服务显式设置可由多个进程访问的共享内存区域,可以实现您的要求。在Windows中,这可以通过使用所有参与者预先知道的名称创建来完成。然后,您可以将该内存块类型转换为结构类型,并在该内存区域中读取和写入字段,所有查看该共享内存的进程都将看到相同的数据

由于多个进程同时运行,您还需要考虑如何更新共享内存区域中的数据。如果多个进程需要更新共享内存区域中的计数器字段或诸如此类的内容,那么您需要围绕该数据的读写实现线程安全实践,例如联锁增量或使用命名互斥对象作为独占访问锁

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; } } }