當本地C++編碼,我使用CRITICAL_SECTIONs頻繁創建線程安全的代碼(或至少我認爲是線程安全的..)。在C++/CLI中,我猜它也可以使用CRITICAL_SECTION?這樣做明智嗎?如果不是,爲什麼?還有什麼替代方案?CRITICAL_SECTION在C++/CLI
回答
隨着他們對使用非託管線程ID,因爲一些實現(如,IIRC,SQL Server)的實現在不同的線程運行的東西,纖維的警告,我會避免使用非託管的關鍵部分爲好。
。我見過的.NET代碼通常使用System::Threading::Monitor::Enter()
和Monitor::Exit()
作爲其關鍵部分(通過C#中的lock
關鍵字方便地包裝)。否則,您也可以使用受管互斥體。
謝謝!因此,而不是使用「EnterCriticalSection(this-> cs); ... LeaveCriticalSection(this-> cs);'我只寫'Monitor :: Enter(this); .. Monitor :: Exit(this);'? – Matz
最佳做法是鎖定一個私有'對象'成員,而不是'this'。 http://msdn.microsoft.com/en-us/library/c5kehkcz.aspx – Medinoc
@Medinoc我用'監控:: Enter鍵()'和'監控::退出()'。但是最近評論中的鏈接指向一些僅用於C#的頁面。爲了說明這一點:在C++/CLI中,「正確的」方式是「Monitor :: Enter()」和「Monitor :: Exit()」? – TobiMcNamobi
- 1. CRITICAL_SECTION在提升?
- 2. WaitForMultipleObjects vs CRITICAL_SECTION
- 3. EnterCriticalSection的和CRITICAL_SECTION在Windows
- 4. Win32中的CRITICAL_SECTION/CONDITION_VARIABLE死鎖
- 5. 確定要複製CRITICAL_SECTION?
- 6. CRITICAL_SECTION並避免包括windows.h?
- 7. 我應該使用CRITICAL_SECTION嗎?
- 8. Win32 CRITICAL_SECTION包含什麼?
- 9. 使用DuplicateOutput時CRITICAL_SECTION發生死鎖
- 10. 與CRITICAL_SECTION模板類編譯,但使用它時得到錯誤
- 11. CRITICAL_SECTION設置並獲得單個布爾值
- 12. CRITICAL_SECTION和CCriticalSection之間的關係是什麼
- 13. 程序退出後,CRITICAL_SECTION對象是否被回收?
- 14. 爲什麼我不能使用LPCRITICAL_SECTION和CRITICAL_SECTION
- 15. 可以將Windows CRITICAL_SECTION對象配置爲拒絕遞歸訪問?
- 16. 什麼是除critical_section以外的Windows同步例程?
- 17. 斷言當前線程沒有保存一個CRITICAL_SECTION鎖
- 18. 升壓條件變量等效採用CRITICAL_SECTION
- 19. boost_logging由於'CRITICAL_SECTION'無法編譯:模糊符號
- 20. .dll中的C++ CRITICAL_SECTION對象給出無法解析的外部符號錯誤
- 21. Win32 - CRITICAL_SECTION結構是否必須具有特定的(4/8字節)對齊?
- 22. 爲什麼類型HANDLE的CRITICAL_SECTION的OwningThread構件中,當表示該線程ID?
- 23. 爲什麼會出現內存錯誤,而我把它含有CRITICAL_SECTION一個對象?
- 24. 已刪除構造函數
- 25. 從純C++代碼調用C++/CLI代碼時出現鏈接器錯誤
- 26. 如何在兩個類之間共享單個關鍵部分
- 27. DeleteCriticalSection VS刪除CriticalSection的
- 28. ConcRT同步結構VS標準庫
- 29. 關鍵部分 - 是或不是?
- 30. 使用EnterCriticalSection的問題
鑑於* C++/CLI *基本* C++爲.NET *,我敢肯定,* .NET *擁有豐富的多線程庫,其功能你也可以使用。 –