在C#中,可以通过Queue类实现生产者消费者模式。以下是一个简单的示例代码:
using System;
using System.Collections;
class Program
{
static Queue queue = new Queue();
static int maxSize = 5;
static void Main()
{
// 创建生产者线程和消费者线程
var producer = new System.Threading.Thread(Producer);
var consumer = new System.Threading.Thread(Consumer);
producer.Start();
consumer.Start();
}
static void Producer()
{
while (true)
{
lock (queue)
{
// 如果队列满了,生产者等待
while (queue.Count == maxSize)
{
System.Threading.Monitor.Wait(queue);
}
// 生产一个物品
int item = new Random().Next(100);
queue.Enqueue(item);
Console.WriteLine("生产者生产了物品:" + item);
// 通知消费者可以消费了
System.Threading.Monitor.PulseAll(queue);
}
}
}
static void Consumer()
{
while (true)
{
lock (queue)
{
// 如果队列为空,消费者等待
while (queue.Count == 0)
{
System.Threading.Monitor.Wait(queue);
}
// 消费一个物品
int item = (int)queue.Dequeue();
Console.WriteLine("消费者消费了物品:" + item);
// 通知生产者可以生产了
System.Threading.Monitor.PulseAll(queue);
}
}
}
}
在上面的示例中,使用Queue类来作为生产者和消费者之间的共享资源队列。生产者线程不断生产物品并加入队列中,消费者线程则不断从队列中取出物品进行消费。通过使用lock和Monitor来实现对队列的互斥访问和条件变量控制。