C# Producer Consumer (生产者消费者模式)demo

  第一套代码将producer Consumer的逻辑写到from类里了,方便在demo的显示界面动态显示模拟生产和消费的过程。
     第二套代码将producer Consumer的逻辑单独写到一个类中,使用委托的方法在from中回显生产消费的过程。
     Demo中均以3个线程作为消费者,1个线程作为生产者为例。 
     由于是C#新手,有不对的地方望不吝赐教。


     先贴下窗口截图,动态生产消费进度显示

 

第一套代码:

 

[csharp]  view plain copy
 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.ComponentModel;  
  4. using System.Data;  
  5. using System.Drawing;  
  6. using System.Linq;  
  7. using System.Text;  
  8. using System.Windows.Forms;  
  9. using System.Threading;  
  10.   
  11. namespace ProducerConsumerDemo  
  12. {  
  13.     public partial class Form1 : Form  
  14.     {  
  15.   
  16.         public Form1()  
  17.         {  
  18.             InitializeComponent();  
  19.         }  
  20.   
  21.         private void button1_Click(object sender, EventArgs e)  
  22.         {  
  23.             StopFlag = false;  
  24.             StartDemo();  
  25.         }  
  26.   
  27.         private void button2_Click(object sender, EventArgs e)  
  28.         {  
  29.             StopFlag = true;  
  30.         }  
  31.   
  32.         public class TaskInfo  
  33.         {  
  34.             public int Index;  
  35.   
  36.             public TaskInfo()  
  37.             {  
  38.             }  
  39.   
  40.             public TaskInfo(int index)  
  41.             {  
  42.                 this.Index = index;  
  43.             }  
  44.         }  
  45.   
  46.         private static bool StopFlag = false;  
  47.         private int ProducerNumber = 1;  
  48.         private int ConsumerNumber = 3;  
  49.   
  50.         // 共用任务队列  
  51.         private Queue<TaskInfo> TaskQueue = new Queue<TaskInfo>();  
  52.         private Semaphore TaskSemaphore = new Semaphore(0, 256);  
  53.   
  54.         private object myLock = new object();  
  55.   
  56.         private void StartDemo()  
  57.         {  
  58.             StartProducer(ProducerNumber);  
  59.             Thread.Sleep(2000);  
  60.             StartConsumer(ConsumerNumber);  
  61.         }  
  62.   
  63.         private void StartProducer(int num)  
  64.         {  
  65.             for (
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值