托管C++是否与C#的lock()和VB的SyncLock等效?如果是这样,我该如何使用它?Managed C++中的C#的锁()
18
A
回答
20
等同于锁/ SyncLock将使用类。
在.NET 1-3.5sp,锁(OBJ)的作用:
Monitor.Enter(obj);
try
{
// Do work
}
finally
{
Monitor.Exit(obj);
}
随着.NET 4中,这将是:
bool taken = false;
try
{
Monitor.Enter(obj, ref taken);
// Do work
}
finally
{
if (taken)
{
Monitor.Exit(obj);
}
}
你可以做翻译这对C++ :
System::Object^ obj = gcnew System::Object();
Monitor::Enter(obj);
try
{
// Do work
}
finally
{
Monitor::Exit(obj);
}
-2
2
在C++中没有等效的lock
关键字。你可以这样做,而不是:
Monitor::Enter(instanceToLock);
try
{
// Only one thread could execute this code at a time
}
finally
{
Monitor::Exit(instanceToLock);
}
55
C++/CLI确实有一个“锁”类 - 所有你需要做的是使用基于堆栈的语义声明锁变量,它会安全地离开显示器时,它的析构函数被调用,例如:
#include <msclr\lock.h>
{
msclr::lock l(m_lock);
// Do work
} //destructor of lock is called (exits monitor).
“m_lock”声明取决于您想保护哪些成员。为了保护实例成员使用:
Object^ m_lock = gcnew Object(); // Each class instance has a private lock -
// protect instance members.
为了保护静态成员的使用:
static Object^ m_lock = gcnew Object(); // Type has a private lock -
// protect static members.
相关问题
- 1. Managed C++中的double.Parse问题
- 2. Common managed C++ gotchas
- 3. Managed C++中托管对象的分配
- 4. Managed C++中字符串的数组
- 5. Managed C++和C++/CLI有什么区别?
- 6. Managed C++ - 忽略头文件
- 7. Windows 2003上的FileLoadException for managed C++ dll
- 8. 如何在Managed C++中执行typeof(int)?
- 9. C#“锁”的Form.BackColor
- 10. c C中的互斥锁替换
- 11. 从Managed C++ DLL中使用C#程序集时发生崩溃
- 12. c中的方法锁#
- 13. Win32中的无锁Deque C++
- 14. C中的锁(对象)#
- 15. Managed C++中的事件:事件问题,WindowEvents
- 16. 在Managed C++ 2005中声明枚举的正确方法?
- 17. 如何从Managed C++(旧语法)调用Foo(long [] [])(C#)?
- 18. 带锁的c#中的线程
- 19. c#锁定
- 20. C# - 锁拉丝
- 21. C,XPMEM和锁
- 22. C#条件锁
- 23. C#不死锁
- 24. 使用锁keywork的C#
- 25. 在C中锁定线程#
- 26. C#从事件中锁定
- 27. C中的锁定文件或目录
- 28. C#中的“锁定”语句耗时吗?
- 29. Objective-C中的无锁消息队列
- 30. C#中的线程死锁例子#
我会考虑http://stackoverflow.com/questions/1369459/cs-lock-in-managed -c/7527111#7527111优越在于它在C++性质(RAII)以及更接近于C#锁关键字 – sehe 2011-09-26 08:56:55