Consider the following function that implements non-blocking access to only the one thread.

public bool TryCancelGroup()
{
    if (Monitor.TryEnter(_locked))
    {
        if (_locked == false)
        {
            _locked = true;

            try
            {
                // do something
            }
            catch (Exception ex)
            {
                _locked = false;
            }
            finally
            {
                Monitor.Exit(_locked);
            }
        }
        return _locked;
    }
    else
    {
        return false;
    }
}

And here is how _locked variable is defined.

bool _locked = false;

Now when program reaches Monitor.Exit(_locked); it throws an System.Threading.SynchronizationLockException saying that _locked variable was not synchronized before.

It all was working before when _locked variable was defined as object

object _locked = new object();

When I changed it to bool in order to use it as boolean flag I started getting this exception.

Edit
Report