繁体   English   中英

的std :: unique_lock <std::mutex> 禁止dll卸货

[英]std::unique_lock<std::mutex> prohibit dll unloading

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

void foo() {
    std::unique_lock<std::mutex> lock(mtx_);
}

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

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

编辑:

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

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

请参阅错误报告。

它看起来像这样的错误已得到修复在Visual Studio 2015年,请参阅的详细信息。

...我可以确认VS2015没有出现这个问题。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM