我想與線程(不是多進程)並行使用DLL(Compute.dll),這是非線程安全的本地C++代碼。如何在C++的多線程中調用非線程安全的DLL?
其實,我有一種循環的,我可以並行:
for(int i = 0; i < x; i++) {
ComputeDLL.DoWork(i); // DLL API Call not thread-safe
}
我找出一種方法來並行我的本地代碼:克隆和Compute1.dll,Compute2.dll重命名Compute.dll。 ..,ComputeN.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()嗎?
感謝
注:我不想因爲我的實際情況使用木裏處理,我必須在參數大數據發送到我的DLL(所以我不希望使用文件通信因爲我需要性能)並且DoWork非常快(10毫秒)。我想輕鬆地在記憶工作,沒有插座,Windows消息隊列,等等......而在將來,我也許會需要線程之間的自定義同步=>多線程模式是最適合我
許多過程將是最安全的(也是最簡單的) - 爲什麼這麼難? – doctorlove
因爲我必須將參數中的大數據發送給我的DLL(所以我不想使用文件進行通信,因爲我需要性能)並且DoWork非常快(10毫秒)。我想在沒有套接字,windows消息隊列等的情況下輕鬆地在內存中工作......將來,我可能需要在線程之間進行自定義同步=>多線程模式對我來說是最好的 –
很多進程,而不是對話彼此,是最安全和最簡單的。 – doctorlove