使用互斥量的 SynchronizationLockException
SynchronizationLockException using mutexes
我在尝试调用 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();
}
您需要在创建时为 monitorKey
分配一个值 (new object();
)(因为它是静态且只读的)。
之后,您必须在等待之前获取锁:
while (condition)
{
lock(monitorKey)
{
Monitor.Wait(monitorKey); // exception is thrown
}
}
或者您可以颠倒顺序并让锁包围 while 以避免不必要的锁 -> 退出循环。
我在尝试调用 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();
}
您需要在创建时为 monitorKey
分配一个值 (new object();
)(因为它是静态且只读的)。
之后,您必须在等待之前获取锁:
while (condition)
{
lock(monitorKey)
{
Monitor.Wait(monitorKey); // exception is thrown
}
}
或者您可以颠倒顺序并让锁包围 while 以避免不必要的锁 -> 退出循环。