2012-03-19 52 views
3

我有一個不是線程安全的源代碼的dll。該DLL相當複雜,需要相當長的時間才能使線程安全。所以我想到了獨立運行Dll的幾個「副本」的想法。最簡單的事情可能是創建N個重命名的Dll副本,併爲每個線程加載一個單獨的Dll。運行一個非線程安全的Dll的多個'實例'?

這是一個可能的解決方案嗎? 有沒有更好的類似方法? 是否有可能存在一些包裝代碼?

我知道這根本不是一個好的工程解決方案。請不要責怪我。但它可能會解決一些問題。

EDIT 2017年

我做這個和它的作品沒有任何問題。大! 請注意,雖然以下幾點:

http://msdn.microsoft.com/en-us/library/2s9wt68x%28v=vs.80%29.aspx

如果DLL聲明任何非本地的數據或對象爲__declspec(線程),它可以引起一個保護錯誤,如果動態加載。

回答

2

這個解決方案是完全可能的,並且在我看來,它是處理全局狀態不是線程安全的DLL的唯一可行方法。這不太好,但確實有效。

1

我們在我們的一些項目中使用英特爾JPG庫進行JPG壓縮/解壓縮,這是一個單線程DLL。該方法工作正常,但正如你所說的不是一個理想的解決方案,因爲如果有問題的DLL分配了大量內存或使用了大量資源,則可能會增加應用程序的整體內存使用量。