2013-06-05 24 views
2

當本地C++編碼,我使用CRITICAL_SECTIONs頻繁創建線程安全的代碼(或至少我認爲是線程安全的..)。在C++/CLI中,我猜它也可以使用CRITICAL_SECTION?這樣做明智嗎?如果不是,爲什麼?還有什麼替代方案?CRITICAL_SECTION在C++/CLI

+0

鑑於* C++/CLI *基本* C++爲.NET *,我敢肯定,* .NET *擁有豐富的多線程庫,其功能你也可以使用。 –

回答

2

隨着他們對使用非託管線程ID,因爲一些實現(如,IIRC,SQL Server)的實現在不同的線程運行的東西,纖維的警告,我會避免使用非託管的關鍵部分爲好。

。我見過的.NET代碼通常使用System::Threading::Monitor::Enter()Monitor::Exit()作爲其關鍵部分(通過C#中的lock關鍵字方便地包裝)。否則,您也可以使用受管互斥體。

+0

謝謝!因此,而不是使用「EnterCriticalSection(this-> cs); ... LeaveCriticalSection(this-> cs);'我只寫'Monitor :: Enter(this); .. Monitor :: Exit(this);'? – Matz

+1

最佳做法是鎖定一個私有'對象'成員,而不是'this'。 http://msdn.microsoft.com/en-us/library/c5kehkcz.aspx – Medinoc

+0

@Medinoc我用'監控:: Enter鍵()'和'監控::退出()'。但是最近評論中的鏈接指向一些僅用於C#的頁面。爲了說明這一點:在C++/CLI中,「正確的」方式是「Monitor :: Enter()」和「Monitor :: Exit()」? – TobiMcNamobi

相關問題