【问题标题】:Run multiple 'instances' of a not thread safe Dll?运行非线程安全 Dll 的多个“实例”?
【发布时间】:2012-03-19 11:52:03
【问题描述】:

我有一个带有源代码的 dll,但它还不是线程安全的。 dll非常复杂,需要很长时间才能使其线程安全。所以我想出了一个想法,就是独立运行几个 Dll 的“副本”。最简单的方法可能是创建 N 个重命名的 Dll 副本并为每个线程加载一个单独的 Dll。

这是一个可能的解决方案吗? 有没有更好的类似方法? 是否可能存在一些包装代码?

我知道这根本不是一个好的工程解决方案。请不要怪我。但它可能会解决一些问题。

2017 年编辑

我已经这样做了,它可以正常工作。伟大的! 请注意以下几点:

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

如果 DLL 将任何非本地数据或对象声明为 __declspec(thread),则在动态加载时可能会导致保护错误。

【问题讨论】:

    标签: windows multithreading visual-c++ dll


    【解决方案1】:

    该解决方案是完全可行的,并且在我看来,这是处理具有非线程安全全局状态的 DLL 的唯一可行方法。它不漂亮,但确实有效。

    【讨论】:

      【解决方案2】:

      我们在一些项目中这样做,这些项目使用英特尔 JPG 库进行 JPG 压缩/解压缩,这是一个单线程 DLL。该方法运行良好,但正如您所说,这不是一个理想的解决方案,因为如果相关 DLL 分配大量内存或使用大量资源,您可能会增加应用程序的整体内存使用量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-15
        • 1970-01-01
        • 2014-01-01
        • 1970-01-01
        相关资源
        最近更新 更多