当本地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 *拥有丰富的多线程库,其功能你也可以使用。 –