【发布时间】:2023-03-05 08:28:01
【问题描述】:
我有一个由第三方程序加载的 windows c++ dll。我最近添加了一个线程池(这个https://github.com/progschj/ThreadPool/blob/master/ThreadPool.h)。
但是当第三方程序不再需要它时,现在不再卸载 dll。原因是线程池中产生的每个线程都会将 dll 引用计数增加一。 一个问题是我不知道第三方程序什么时候不再需要dll,所以之前不能手动关闭线程池,以减少引用计数。
所以我的问题是,有没有一种方法可以在不增加 dll 引用计数的情况下创建线程? 如果是这样,当 dll 被卸载时,我是否需要手动关闭线程池?
旁注:我使用 vs 2019 和 c++17。
【问题讨论】:
-
如何增加 dll 引用计数?为什么不在线程结束时再次减少引用计数?
-
当线程池启动它的线程时,引用计数会自动增加(每个线程增加一个)。问题是,它是一个线程池,在线程池关闭之前没有尽头。而接下来的问题是,我不知道程序什么时候不再需要这个dll了,所以我不能提前关闭它。
-
我没有看到您在上面链接的线程池源中的 dll 引用计数有任何增加。那么这是在哪里发生的呢?
-
似乎每次创建线程时都会发生这种情况。所以在第 38 行
workers.emplace_back( -
在这种情况下,线程池的每个线程都应该在完成后再次减少 dll 引用计数。这不会发生吗?
标签: c++ multithreading dll reference stdthread