在多个进程中加载​​相同的dll实例

Ami*_*mit 3 dll shared-memory

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中对Ai的静态变量所做的更改可用于Program2,反之亦然,

dth*_*rpe 8

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

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

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