public static void Exit_WhenHeldBySomeoneElse_ThrowsSynchronizationLockException()
{
var obj = new object();
var b = new Barrier(2);
Task t = Task.Run(() =>
{
lock (obj)
{
b.SignalAndWait();
b.SignalAndWait();
}
});
b.SignalAndWait();
Assert.Throws<SynchronizationLockException>(() => Monitor.Exit(obj));
b.SignalAndWait();
t.Wait();
}