我正在为Windows Phone 7开发一个应用程序。现在我有2个帖子。
主题1
lock(somelock)
{
//does some work
Monitor.Wait();
//Does some work
}
线程2
lock(somelock)
{
//does some work
Monitor.Signal();
//does some work;
}
现在我想知道Monitor.wait()
是否表示另一个线程。
答案 0 :(得分:2)
失败获取锁定的线程保存在就绪队列中。如果线程 锁定调用Wait,则它产生锁定,并且就绪队列中的任何线程都有资格被激活,从而获得锁定。所以以某种方式它们被激活,但它们不会“脉动”,如果这是你所说的信号。
相比之下,自愿调用Wait 的线程位于一个单独的队列中;它不会被一个产生锁的线程激活;线程返回就绪队列的唯一方法是,如果带锁的线程调用Pulse / PulseAll,或者发生超时。请注意,Pulse / PulseAll 不 产生锁定 - 它们只是从休眠队列到就绪队列的更多线程/线程。第二个示例中的锁仅在离开lock
语句时生成。因此,请注意,在保持独占锁定的同时仍然完成脉冲(示例中的信号)之后“做一些工作”(实际上,您也可以将Pulse移动到锁定语句的末尾)
答案 1 :(得分:1)
不,但Monitor.Pulse()
确实如此。如果要发出Monitor.Wait()
条件状态可能已更改的信号,请使用Monitor.Pulse()。
http://www.albahari.com/threading/part4.aspx#_Signaling_with_Wait_and_Pulse