C#'s lock() en C++Managé
C++ géré un équivalent de C# lock ()<!-Et le SyncLock de VB? Si oui, comment dois-je l'utiliser?
4 réponses
l'équivalent d'un lock / SyncLock serait d'utiliser le Monitor classe.
.NET 1-3.5 sp, de verrouillage(obj):
Monitor.Enter(obj);
try
{
// Do work
}
finally
{
Monitor.Exit(obj);
}
à partir de .NET 4, ce sera:
bool taken = false;
try
{
Monitor.Enter(obj, ref taken);
// Do work
}
finally
{
if (taken)
{
Monitor.Exit(obj);
}
}
vous pouvez traduire ceci en C++ en faisant:
System::Object^ obj = gcnew System::Object();
Monitor::Enter(obj);
try
{
// Do work
}
finally
{
Monitor::Exit(obj);
}
C++ / CLI a une classe' lock ' - tout ce que vous devez faire est de déclarer la variable lock en utilisant la sémantique basée sur la pile et il sortira en toute sécurité du moniteur quand son destructeur est appelé, par exemple:
#include <msclr\lock.h>
{
msclr::lock l(m_lock);
// Do work
} //destructor of lock is called (exits monitor).
la déclaration "m_lock" dépend des membres que vous voulez protéger. Pour protéger les membres de l'instance, utilisez ceci:
Object^ m_lock = gcnew Object(); // Each class instance has a private lock -
// protect instance members.
Pour protéger les membres statiques utiliser ceci:
static Object^ m_lock = gcnew Object(); // Type has a private lock -
// protect static members.
il n'y a pas d'équivalent de lock
mot clé en C++. Vous pouvez faire ceci à la place:
Monitor::Enter(instanceToLock);
try
{
// Only one thread could execute this code at a time
}
finally
{
Monitor::Exit(instanceToLock);
}