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).  
'm_lock'声明取决于您要保护的成员.要保护实例成员,请使用:
Object^ m_lock = gcnew Object(); // Each class instance has a private lock - 
                                 // protects instance members.
要保护静态成员,请使用:
static Object^ m_lock = gcnew Object(); // Type has a private lock -
                                        // protects static members.
Ree*_*sey 22
锁/ SyncLock的等价物是使用Monitor类.
在.NET 1-3.5sp中,lock(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);
}