gpt4 book ai didi

c++ - 在多线程应用程序中安全卸载 DLL/共享对象

转载 作者:行者123 更新时间:2023-11-28 05:47:58 27 4
gpt4 key购买 nike

所以我有一个用 C++ 编写的多线程应用程序,整个应用程序是使用异步事件处理模型实现的。线程调用的函数基于一个 id(数组索引),其函数指针存储在索引处的数组中(具有 id 的值),即,如果我将一个 id 为 45 的事件插入事件队列,其中一个线程选择事件并调用其指针存储在索引 45 处的函数。现在,其中一些函数位于 dll/共享对象中,可以随时通过来自不同 ID 的事件将其卸载。发生这种情况时,将调用 FreeLibrary(或等效的)。这会导致应用程序崩溃,我认为这是因为仍有线程仍在执行 dll 中的函数。所以我的问题是,是否有任何方法可以安全地卸载 dll 而不必担心线程仍在执行 dll 中的代码,或者是否有办法检查有多少线程仍在执行 dll 中的代码?

最佳答案

您可能有一个对象,它在其构造函数中加载库,在析构函数中卸载它,并为库中的每个符号都有一个非静态成员函数包装器。然后该对象的生命周期将是库的生命周期。

现在您的问题已简化为在多线程程序中管理对象。 shared_ptr 可能会满足您的需要。也许您已经有了另一个共享对象,因此您可以简单地将库包装器作为数据成员放入该对象中。

关于c++ - 在多线程应用程序中安全卸载 DLL/共享对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35841307/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com