簡體   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