2013-06-05 28 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

相关问题