刚接触C#不久,想做个C,C++ Server中经常使用的Producer Consumer模式,以满足多任务排队多线程处理的模式。于是写了下面的demo。
第一套代码将producer Consumer的逻辑写到from类里了,方便在demo的显示界面动态显示模拟生产和消费的过程。
第二套代码将producer Consumer的逻辑单独写到一个类中,使用委托的方法在from中回显生产消费的过程。
Demo中均以3个线程作为消费者,1个线程作为生产者为例。
由于是C#新手,有不对的地方望不吝赐教。
第一套代码将producer Consumer的逻辑写到from类里了,方便在demo的显示界面动态显示模拟生产和消费的过程。
第二套代码将producer Consumer的逻辑单独写到一个类中,使用委托的方法在from中回显生产消费的过程。
Demo中均以3个线程作为消费者,1个线程作为生产者为例。
由于是C#新手,有不对的地方望不吝赐教。
先贴下窗口截图,动态生产消费进度显示
第一套代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace ProducerConsumerDemo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
StopFlag = false;
StartDemo();
}
private void button2_Click(object sender, EventArgs e)
{
StopFlag = true;
}
public class TaskInfo
{
public int Index;
public TaskInfo()
{
}
public TaskInfo(int index)
{
this.Index = index;
}
}
private static bool StopFlag = false;
private int ProducerNumber = 1;
private int ConsumerNumber = 3;
// 共用任务队列
private Queue<TaskInfo> TaskQueue = new Queue<TaskInfo>();
private Semaphore TaskSemaphore = new Semaphore(0, 256);
private object myLock = new object();
private void StartDemo()
{
StartProducer(ProducerNumber);
Thread.Sleep(2000);
StartConsumer(ConsumerNumber);
}
private void StartProducer(int num)
{
for (int i = 0; i < num; i++)