我的代码永远不会到达Monitor.Pulse行

时间:2018-05-30 12:46:30

标签: c# .net multithreading

我有这段代码

    private object volatile objLock = new object();



   void Foo()
    {
      // doing something
      lock(objLock)
      {
        Monitor.Wait(objLock);
      }
      // finish up
    }

    void Bar()
    {
      lock(objLock)
      {
         Monitor.Pulse(objLock);
      }
    }

这两个函数都是作为来自外部设备的事件处理程序触发的,并且将是不同的线程

我的问题是,当调用Bar()时,它会在lock(objLock)行停止。对我来说,表明objLock已被锁定......

如果我从主应用程序(通过按钮)调用Foo(),那么一切都很完美!

我做错了什么?

我正在使用.NET 3.5

1 个答案:

答案 0 :(得分:-2)

  

这两个函数都是作为来自外部设备的事件处理程序触发的,并且将是我不同的线程!

我认为他们将在同一个线程上调用。有点猜测,但这是他们可以阻止对方的唯一条件。

Wait()阻止进一步的事件处理时。