Search code examples
multithreadingsynchronizationmanaged-c++

C#'s lock() in Managed C++


Does managed C++ have an equivalent to C#'s lock() and VB's SyncLock? If so, how do I use it?


Solution

  • The equivelent to a lock / SyncLock would be to use the Monitor class.

    In .NET 1-3.5sp, lock(obj) does:

    Monitor.Enter(obj);
    try
    {
        // Do work
    }
    finally
    {
        Monitor.Exit(obj);
    }
    

    As of .NET 4, it will be:

    bool taken = false;
    try
    {
        Monitor.Enter(obj, ref taken);
        // Do work
    }
    finally
    {
        if (taken)
        {
            Monitor.Exit(obj);
        }
    }
    

    You could translate this to C++ by doing:

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