C# 多线程-- Monitor

以下内容摘自《C#2.0完全参考手册》:(程序代码有所修改)
线程T正在Lock块内执行,此时需要暂时不可用的资源R,那么T该做什么呢?如果T等待R资源可用,那么有可能进入某种死循环,因为T将冻结Lock块内的对象,
组织其他的进程访问。这样看来,加锁不是一个最佳的解决方案,因为它局部地抵消了多线程编程的优点。更好的解决方案是让T暂时放弃对对象的的控制,允许
其他进程运行。当R变得可用时,就通知T让它恢复执行。这种方式的实现依赖于线程间的通信。 在这里要做的是使一个线程能够让位于另一个被中断的线程,并
在能够继续运行时被唤醒。C#利用Wait(),Pulse(),PulseAll()等方法来实现线程间的通信。
Wait(),Pulse(),PulseAll()方法由Monitor类定义,只能从锁定的代码块内调用这些方法…… 线程在被暂时中断运行时调用Wait()方法,这使得线程暂时进入休
眠状态并释放对象的锁以允许其他线程使用此对象。 当其他线程使用完锁对象调用Pluse()或PluseAll()时,唤醒休眠的进程。Pluse()被调用时将恢复等待锁的线
程队列中的第一个线程,而调用PluseAll()表示将锁释放给所有正在等待的线程。



Code
 下面这个可以作为对比
Code

posted @ 2009-08-12 20:01  hsrzyn  阅读(850)  评论(0)    收藏  举报