gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 00:24:04 26 4
gpt4 key购买 nike

库1[dll]
{
A级
{
静态int i=0;
}
}

Program1[exe] 引用了 Lib1
{
B类
{
主要的()
{
A.i = 5;
}
}
}

Program2 [exe] 引用了 Lib1
{
C类
{
主要的()
{
A.i = 5;
}
}
}

如果 Program1 和 Program2 同时执行,它们是否有可能引用 Lib1 的单个实例并且对 Program1 中 A.i 的静态变量所做的更改对 Program2 可用,反之亦然,

最佳答案

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

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

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

关于dll - 在多个进程中加载​​相同的 dll 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5995790/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com