使用互斥量的 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 以避免不必要的锁 -> 退出循环。