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.