Multithreading C#和#x27;托管C++; 托管C++是否有与C语言和VB同步时钟的等价性?如果是这样,我该如何使用它?

Multithreading C#和#x27;托管C++; 托管C++是否有与C语言和VB同步时钟的等价性?如果是这样,我该如何使用它?,multithreading,synchronization,managed-c++,Multithreading,Synchronization,Managed C++,与锁/同步锁等效的是使用该类 在.NET 1-3.5sp中,锁(obj)执行以下操作: 从.NET 4开始,它将是: bool taken = false; try { Monitor.Enter(obj, ref taken); // Do work } finally { if (taken) { Monitor.Exit(obj); } } 你可以通过C++来将它翻译成C++: System::Object^ obj = gcnew

与锁/同步锁等效的是使用该类

在.NET 1-3.5sp中,锁(obj)执行以下操作:

从.NET 4开始,它将是:

bool taken = false;
try
{
    Monitor.Enter(obj, ref taken);
    // Do work
}
finally
{
    if (taken)
    {
        Monitor.Exit(obj);
    }
}
<>你可以通过C++来将它翻译成C++:

System::Object^ obj = gcnew System::Object();
Monitor::Enter(obj);
try
{
    // Do work
}
finally
{
    Monitor::Exit(obj);
}

试试线程。监视器。在C++中没有等同的<代码>锁< /Cord>关键字。您可以这样做:

Monitor::Enter(instanceToLock);
try
{
    // Only one thread could execute this code at a time
}
finally
{
    Monitor::Exit(instanceToLock);
}
C++/CLI确实有一个类。您只需使用基于堆栈的语义声明一个锁变量,当调用其析构函数时,它将安全退出监视器,例如:

#包括
{    
msclr::锁l(m_锁);
//工作
}//调用锁的析构函数(退出监视器)。
m_lock
声明取决于您是同步对实例还是静态成员的访问

要保护实例成员,请使用以下命令:

Object^m_lock=gcnew Object();//每个类实例都有一个私有锁-
//保护实例成员。
要保护静态成员,请使用以下命令:

静态对象^m_lock=gcnew Object();//类型有一个私有锁-
//保护静态成员。

我会考虑高级,因为它既有C++的性质(RAII),也有更接近C锁的关键字“危险的东西”,“做工作”不去分解人。谢谢你的评论。我不熟悉C++,你怎么声明“X”?“x”声明的感谢规则与C中的相同,如下所述:。总之,指导原则是:-如果要保护实例变量,请将其定义为私有对象;-如果要保护静态变量(或者如果临界部分出现在给定类的静态方法中),请将其定义为私有静态对象变量。谢谢你的问题-我会加强答案。
Monitor::Enter(instanceToLock);
try
{
    // Only one thread could execute this code at a time
}
finally
{
    Monitor::Exit(instanceToLock);
}