用C#线程技术模拟“生产者-消费者”经典进程同步问题

今天看了C#的线程相关的内容,也做了一些练习,顺便实现了操作系统中比较经典的进程同步问题——生产者-消费者。

这个问题实在比较经典,当然也是比较简单的,呵呵。

 

大体思路如下:

 

缓冲区——假设有一个大小为2的缓冲区,在我的例子里,缓冲区是一个队列Queue<int>。

生产者——在我的例子里,生产者是一个名为download()的函数。

消费者——在我的例子里,消费者是一个名为print()的函数。

 

执行流程超级简单:生产者往缓冲区中写入数据,消费者从缓冲区中拿出数据,只是这个过程中要注意线程同步。假设我们要从网上下载5个文章,并将其打印出来,每当下载线程下载了2个文章(因为缓冲区大小设置成了2),则等待打印线程将缓冲区中的文章打印掉以清空缓冲区。就这样,直到我们的5篇文章全部下载并打印完毕。

 

废话就不多说了,看代码吧,反正我的注释还算写得比较清晰的,呵呵。

 

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Threading;
  5. namespace TestThreadDownloadAndPrint
  6. {
  7.     class TestThreadDownloadAndPrint
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             Article article = new Article();
  12.             //创建线程
  13.             Thread threadPrint = new Thread(new ThreadStart(article.Print));
  14.             Thread threadDownload
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值