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

卸载dll时出现问题。 就像这个一样,退出不同。 我正在使用LoadLibraryA加载一个dll,然后调用一个函数,并closures与FreeLibrary的DLL。 但是,DLL不卸载,但FreeLibrary返回成功。 简化代码:

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

在debugging代码并查看Process Explorer时, unique_lock创build第二个线程, 但为什么 ? 此线程只要应用程序运行就运行。 没有什么别的; 没有其他句柄的DLL,没有其他function。 此外,该DLL仍然在程序中加载。 如果我删除上面的行,一切都很好。 DLL是卸载好,没有额外的线程。 所以我的问题是, 如何避免这种行为,为什么是unique_lock创build一个线程?

互斥体是用于multithreading,但在testing时,只有一个线程,加载DLL调用foo,并卸载DLL。

编辑:

我不知道这是否是在互斥体/ unique_lock的视觉工作室实施中的错误,但我通过使用boost的互斥体/ unique_lock解决了这个问题。

Solutions Collecting From Web of "std :: unique_lock <std :: mutex>禁止卸载"

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

看到这个错误报告。

它看起来像这个错误已经在Visual Studio 2015中修复。请参阅此了解详细信息。

…我可以确认这个问题没有发生在VS2015上。 …