簡體   English   中英

出現此錯誤時如何實現非托管線程安全集合:<mutex> 使用 /clr 編譯時不支持

[英]How to implement a unmanaged thread-safe collection when I get this error: <mutex> is not supported when compiling with /clr

我有一個 C++ 應用程序,它由非托管 C++、托管 C++ 和 C# 組成。 在非托管部分,我嘗試使用 std::mutex 創建線程安全集合。

但是,當我使用互斥鎖時,出現以下錯誤;

錯誤 C1189:#error : 使用 /clr 或 /clr:pure 編譯時不支持 <mutex>。

知道為什么我不能使用互斥鎖嗎? 有人可以推薦一個替代品,以便我可以創建一個線程安全的非托管集合嗎?

它不受支持,因為 std::mutex 實現使用 GetCurrentThreadId()。 這是不應該出現在托管代碼中使用,因為它可能不使用線程來實現線程的自定義CLR主機上運行的WINAPI功能。

這是一個很好的問題,它表明您正在構建錯誤的代碼。 您的本機 C++ 正在使用 /clr 進行編譯。 效果很好,所有符合 C++03 的代碼都可以編譯為 MSIL 並在運行時即時編譯,就像托管代碼一樣。 您不希望這種情況發生,您的本機 C++ 代碼應該編譯為機器代碼並獲得編譯時代碼優化器的喜愛。

在您的項目中關閉此源代碼文件以及其他可能的源代碼文件的 /clr 選項。 右鍵單擊 + 屬性,常規。 如果mutex出現在 .h 文件中,您必須在 C++/CLI 源文件中 #include,那么您有一個更大的問題,請使用接口或 pimpl 來隱藏實現細節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM