使用互斥锁的SynchronizationLockException

时间:2015-07-02 17:07:56

标签: c# multithreading parallel-processing

我在尝试调用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();
        }

1 个答案:

答案 0 :(得分:2)

您需要在创建时为new object();分配一个值(monitorKey)(因为它是静态和只读的)。

之后,您必须在等待之前获取锁定:

while (condition)
{
   lock(monitorKey)
   {
      Monitor.Wait(monitorKey); // exception is thrown
   }
}

或者您可以撤销订单并将锁定环绕,以避免不必要的锁定 - >退出周期。