Bri*_*ian 21 multithreading synchronization managed-c++
托管C++是否具有与C#的lock()和VB的SyncLock相同的功能?如果是这样,我该如何使用它?
Ser*_*ger 64
C++/CLI确实有一个'lock'类 - 您需要做的就是使用基于堆栈的语义声明锁变量,并且在调用析构函数时它将安全地退出监视器,例如:
#include <msclr\lock.h>
{
msclr::lock l(m_lock);
// Do work
} //destructor of lock is called (exits monitor).
Run Code Online (Sandbox Code Playgroud)
'm_lock'声明取决于您要保护的成员.要保护实例成员,请使用:
Object^ m_lock = gcnew Object(); // Each class instance has a private lock -
// protects instance members.
Run Code Online (Sandbox Code Playgroud)
要保护静态成员,请使用:
static Object^ m_lock = gcnew Object(); // Type has a private lock -
// protects static members.
Run Code Online (Sandbox Code Playgroud)
Ree*_*sey 22
锁/ SyncLock的等价物是使用Monitor类.
在.NET 1-3.5sp中,lock(obj)执行:
Monitor.Enter(obj);
try
{
// Do work
}
finally
{
Monitor.Exit(obj);
}
Run Code Online (Sandbox Code Playgroud)
从.NET 4开始,它将是:
bool taken = false;
try
{
Monitor.Enter(obj, ref taken);
// Do work
}
finally
{
if (taken)
{
Monitor.Exit(obj);
}
}
Run Code Online (Sandbox Code Playgroud)
您可以通过执行以下操作将其转换为C++:
System::Object^ obj = gcnew System::Object();
Monitor::Enter(obj);
try
{
// Do work
}
finally
{
Monitor::Exit(obj);
}
Run Code Online (Sandbox Code Playgroud)