Cof*_*ars 4 c++ windows multithreading legacy-code
我有一个旧的C++库,专为在单线程环境中使用而设计.
该库公开了用于初始化的接口,这些接口改变了库的内部数据结构,以及用法,它只读取数据并进行计算.
我的目标是在Windows多线程应用程序中使用此库,其中不同的线程调用使用不同数据初始化的dll实例.
假设重写dll以允许多线程将是禁止的,是否有一些方法让DLL的多个实例存在于同一进程中,具有单独的内存空间,或通过其他方式获得类似的结果?
如果DLL包含静态资源,那么这些资源将在创建的所有实例之间共享.
一种可能的方法是创建单个实例并使用某种锁机制限制对它的访问.这可能会降低性能,具体取决于使用情况,但是如果不修改DLL的内部结构,则可能难以使用多个实例.
在进程中连接到单个DLL的所有线程之间共享静态资源会在这里与您发生冲突.
但是,有一个技巧可以实现这一目标.只要DLL具有不同的名称,系统就会将它们视为不同,因此会创建单独的代码和数据实例.
实现此目的的方法是,对于每个线程,将DLL复制到临时文件并从那里加载LoadLibrary.你必须使用显式链接(GetProcAddress)而不是lib文件,但这是唯一的方法.