【发布时间】:2014-01-01 03:20:59
【问题描述】:
我想与线程(而不是多进程)并行化使用 非线程安全的 DLL (Compute.dll) 的本机 C++ 代码。
实际上,我有一种可以并行化的循环:
for(int i = 0; i < x; i++) {
ComputeDLL.DoWork(i); // DLL API Call not thread-safe
}
我确定了一种并行化本机代码的方法:克隆并重命名 Compute1.dll、Compute2.dll、...、ComputeN.dll 中的 Compute.dll 并按线程使用一个 dll。 因此,对于链接,我必须以同样的方式在 Compute1.lib、Compute2.lib、...、ComputeN.lib 中复制 Compute.lib
使用此解决方案,我必须在我的应用程序中复制代码以定义多个 ComputeDLL 类:ComputeDLL1、ComputeDLL2、...带有显式静态链接的 ComputeDLLN:
#pragma comment(lib,'Compute1.lib'); // for ComputeDLL1.h
#pragma comment(lib,'Compute2.lib'); // for ComputeDLL2.h
etc.
你能告诉我这个解决方案是否有效吗?
在这个解决方案中:
- 编译前必须知道线程数
- 我有太多重复的代码
是否有另一种更清洁的好方法来解决我的问题? 我可以使用 LoadLibrary() 吗?
谢谢
Nb:我不想使用多重处理,因为在我的实际情况下,我必须将大数据作为参数发送到我的 DLL(所以我不想使用文件进行通信,因为我需要性能)和DoWork 非常快(10 毫秒)。我想在没有套接字、Windows 消息队列等的情况下轻松地在内存中工作......将来,我可能需要线程之间的自定义同步 => 多线程模式对我来说是最好的
【问题讨论】:
-
许多流程将是最安全的(也是最简单的)——为什么要做困难的事情?
-
因为我必须将参数中的大数据发送到我的 DLL(所以我不想使用文件进行通信,因为我需要性能)并且 DoWork 非常快(10 毫秒)。我想在没有套接字、Windows 消息队列等的情况下轻松地在内存中工作......将来,我可能需要线程之间的自定义同步 => 多线程模式对我来说是最好的
-
大量进程,不相互交谈,是最安全和最简单的。
-
我的问题没有答案?
标签: c++ windows linker thread-safety