std :: unique_lock <std :: mutex>禁止dll卸载

use*_*087 4 c++ windows dll

卸载dll时遇到问题.它就像这个但是不同.我正在使用LoadLibraryA加载一个DLL 然后调用一个函数并用FreeLibrary关闭dll .但是,dll未卸载但FreeLibrary返回成功.减少代码:

void foo() {
    std::unique_lock<std::mutex> lock(mtx_);
}
Run Code Online (Sandbox Code Playgroud)

在调试代码并查看Process Explorer时, unique_lock会创建第二个线程,但为什么呢?只要应用程序运行,此线程也会运行.没有别的; dll没有其他句柄,没有其他功能.dll仍然在程序中加载.如果我删除上面的行,一切都很好.dll卸载正常,没有额外的线程.所以我的问题是,如何避免这种行为以及为什么unique_lock创建一个线程?

互斥体用于多线程,但在测试时,只有一个线程,加载dll调用foo,并卸载dll.

编辑:

我不知道这是mutex/unique_lock的visual studio实现中的错误,但我通过使用boost的mutex/unique_lock解决了这个问题.

小智 6

这是Visual Studio中的一个错误,当您使用std :: thread或std :: mutex等时,它们会异常增加DLL的引用计数.

请参阅错误报告.