温馨提示×

如何通过Queue类实现C#中的生产者消费者模式

c#
小樊
92
2024-08-18 06:40:37
栏目: 编程语言

在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来实现对队列的互斥访问和条件变量控制。

0