C#的多线程机制初探(7)
发表于:2007-06-30来源:作者:点击数:
标签:
?大家可以看到,在上面的例程中,同步是通过等待Monitor.Pulse()来完成的。首先生产者生产了一个值,而同一时刻消费者处于等待状态,直到收到生产者的“脉冲(Pulse)”通知它生产已经完成,此后消费者进入消费状态,而生产者开始等待消费者完成操作后将调用M
?大家可以看到,在上面的例程中,同步是通过等待Monitor.Pulse()来完成的。首先生产者生产了一个值,而同一时刻消费者处于等待状态,直到收到生产者的“脉冲(Pulse)”通知它生产已经完成,此后消费者进入消费状态,而生产者开始等待消费者完成操作后将调用Monitor.Pulese()发出的“脉冲”。它的执行结果很简单:
??Produce: 1
??Consume: 1
??Produce: 2
??Consume: 2
??Produce: 3
??Consume: 3
??...
??...
??Produce: 20
??Consume: 20
??事实上,这个简单的例子已经帮助我们解决了多线程应用程序中可能出现的大问题,只要领悟了解决线程间冲突的基本方法,很容易把它应用到比较复杂的程序中去。
四.小结
??这篇文章之所以叫做《C#多线程机制初探》是因为它只涉及到多线程机制的一个角落——什么是线程,如何创建和使用线程,怎样进行线程的同步和通讯等等,而没有讲到C#中其它与多线程相关的内容如使用线程池(ThreadPool)实现异步I/O,使用定时器(Timer)定时触发线程等等,对于线程的其它典型问题如死锁和饥饿也没有明确的解决。并不是我想吊大家胃口,实在因为内容太多,我怕一篇文章写下来大家还没有看就已经吓昏了头,所以我决定分开来写,请大家静心期待“再探”和“再再探”的出炉。
??点击这里
下载本文的全部源代码。
原文转自:http://www.ltesting.net