C# 多线程 生产者 消费者
想写一个程序,关于生产者和消费者,请高手指点下该如何实现?生产者每次生产一件商品放到商品容器中,消费者每次从商品容器中消费一件商品。程序启动后:1、商品容器中有初始的10...
想写一个程序,关于生产者和消费者,请高手指点下该如何实现?
生产者每次生产一件商品放到商品容器中,消费者每次从商品容器中消费一件商品。
程序启动后:
1、商品容器中有初始的10件商品,
2、生产者线程开始生产商品,生产完5件商品后停止,
3、同时消费者线程开始消费商品,如果商品容器中剩余商品只剩下8件了就不再继续消费了,
4、生产的时候不能消费,消费的时候不能生产(类似与读一个文件的时候不能写入,只有写完后才能开始读取)
这里有一个例子,但不能满足第3条,可以在他的基础上稍作修改
http://blog.sina.com.cn/s/blog_4ca200e20100oi10.html 展开
生产者每次生产一件商品放到商品容器中,消费者每次从商品容器中消费一件商品。
程序启动后:
1、商品容器中有初始的10件商品,
2、生产者线程开始生产商品,生产完5件商品后停止,
3、同时消费者线程开始消费商品,如果商品容器中剩余商品只剩下8件了就不再继续消费了,
4、生产的时候不能消费,消费的时候不能生产(类似与读一个文件的时候不能写入,只有写完后才能开始读取)
这里有一个例子,但不能满足第3条,可以在他的基础上稍作修改
http://blog.sina.com.cn/s/blog_4ca200e20100oi10.html 展开
1个回答
展开全部
class Program
{
AutoResetEvent are_producer = new AutoResetEvent(false);//生产者启动标记
ManualResetEvent are_consumer = new ManualResetEvent(false);//消费者启动标记
Random rnd = new Random();
List<int> list = new List<int>();
void init()//初始化
{
for (int i = 0; i < 10; i++)
{
int r = rnd.Next(1, 100);
list.Add(r);
Console.WriteLine("容器初始化,添加" + r);
}
Console.WriteLine("容器初始化完成,元素数" + list.Count);
}
void producer()
{
while (true)
{
are_producer.WaitOne();//等待生产开始
for (int i = 0; i < 5; i++)
{
int r = rnd.Next(1, 100);
list.Add(r);
Console.WriteLine("生产者生产了" + r);
}
Console.WriteLine("生产完成,总元素数量" + list.Count);
Thread.Sleep(1000);
are_consumer.Set();//通知开始消费
}
}
void consumer()
{
while (true)
{
are_consumer.WaitOne();//等待消费开始
int r = list[0];
list.RemoveAt(0);
Console.WriteLine("消费者消费了{0},剩余元素{1}个", r, list.Count);
if (list.Count <= 8)
{
are_consumer.Reset();//停止消费
are_producer.Set();//开始生产
}
Thread.Sleep(1000);
}
}
static void Main(string[] args)
{
Program prg = new Program();
prg.init();
(new Thread(new ThreadStart(prg.producer))).Start();
(new Thread(new ThreadStart(prg.consumer))).Start();
prg.are_producer.Set();//开始生产
Console.ReadKey();
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询