我在尝试调用Monitor.Wait(object)时在互斥锁内获得SynchronizationLockException。我应该改变什么?
static Mutex mutex;
static readonly object monitorKey;
condition = true;
mutex.WaitOne();
try
{
while (condition)
{
Monitor.Wait(monitorKey); // exception is thrown
}
isAnyoneWriting = true;
}
finally
{
mutex.ReleaseMutex();
}
答案 0 :(得分:2)
您需要在创建时为new object();
分配一个值(monitorKey
)(因为它是静态和只读的)。
之后,您必须在等待之前获取锁定:
while (condition)
{
lock(monitorKey)
{
Monitor.Wait(monitorKey); // exception is thrown
}
}
或者您可以撤销订单并将锁定环绕,以避免不必要的锁定 - >退出周期。