在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來實現對隊列的互斥訪問和條件變量控制。