託管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++中的ServiceController? (.NET)
- 2. Managed C++中的double.Parse問題
- 3. Common managed C++ gotchas
- 4. Managed C++中託管對象的分配
- 5. Managed C++中字符串的數組
- 6. Managed C++和C++/CLI有什麼區別?
- 7. Managed C++ - 忽略頭文件
- 8. 在C++/CLI中#pragma managed(push,on)和#pragma managed(push,off)?
- 9. Windows 2003上的FileLoadException for managed C++ dll
- 10. 如何在Managed C++中執行typeof(int)?
- 11. 將舊的Managed-C++項目轉換爲新的C++/CLI
- 12. C#「鎖」的Form.BackColor
- 13. c C中的互斥鎖替換
- 14. 將託管C#的參數傳遞給Managed C++
- 15. 從Managed C++ DLL中使用C#程序集時發生崩潰
- 16. 理解c中的鎖#
- 17. C中的鎖(對象)#
- 18. Win32中的無鎖Deque C++
- 19. c中的鎖碼部分#
- 20. c中的鎖定機制#
- 21. c中的方法鎖#
- 22. C#中的鎖定變量#
- 23. Mysterious C++/CLI managed/unmanaged Eigen出錯
- 24. 比較C#中RSA,ManagedRijndael和Managed AES之間的性能差異
- 25. Managed C++中的事件:事件問題,WindowEvents
- 26. 在Managed C++ 2005中聲明枚舉的正確方法?
- 27. 如何從Managed C++(舊語法)調用Foo(long [] [])(C#)?
- 28. 帶鎖的c#中的線程
- 29. 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