今天看了C#的线程相关的内容,也做了一些练习,顺便实现了操作系统中比较经典的进程同步问题——生产者-消费者。
这个问题实在比较经典,当然也是比较简单的,呵呵。
大体思路如下:
缓冲区——假设有一个大小为2的缓冲区,在我的例子里,缓冲区是一个队列Queue<int>。
生产者——在我的例子里,生产者是一个名为download()的函数。
消费者——在我的例子里,消费者是一个名为print()的函数。
执行流程超级简单:生产者往缓冲区中写入数据,消费者从缓冲区中拿出数据,只是这个过程中要注意线程同步。假设我们要从网上下载5个文章,并将其打印出来,每当下载线程下载了2个文章(因为缓冲区大小设置成了2),则等待打印线程将缓冲区中的文章打印掉以清空缓冲区。就这样,直到我们的5篇文章全部下载并打印完毕。
废话就不多说了,看代码吧,反正我的注释还算写得比较清晰的,呵呵。
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Threading;
- namespace TestThreadDownloadAndPrint
- {
- class TestThreadDownloadAndPrint
- {
- static void Main(string[] args)
- {
- Article article = new Article();
- //创建线程
- Thread threadPrint = new Thread(new ThreadStart(article.Print));
- Thread threadDownload