2012-03-19 102 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分配了大量内存或使用了大量资源,则可能会增加应用程序的整体内存使用量。