示例#1
0
    /// <summary>
    /// 生产者线程
    /// </summary>
    /// <param name="parameter"></param>
    void ProducerThread(object parameter)
    {
        // 拿到参数
        Parameter par = parameter as Parameter;

        // 拿到缓冲区
        QueueProduces produces = par.Produces;

        // 拿到生产者名字
        String producerName = par.Name;

        // 实例化生产者
        Producer producer = new Producer(producerName);

        // 打印日志
        StringBuilder log = new StringBuilder("Producer ");

        log.Append("Name: ").Append(producerName);
        Console.WriteLine(log);

        // 该生产者一直生产产品
        while (true)
        {
            Produce produce = Produce.Create(producerName, 1000, 2000);
            produces.Push(produce);
            Thread.Sleep(1000);
        }
    }
示例#2
0
    /// <summary>
    /// 并发测试
    /// </summary>
    public void ConcurrentTest()
    {
        // 得到生产者数量
        Console.WriteLine("Input Producer's Number: ");
        String input       = Console.ReadLine();
        int    producerNum = Int32.Parse(input);

        // 得到消费者数量
        Console.WriteLine("Input Consumer's Number: ");
        input = Console.ReadLine();
        int consumerNum = Int32.Parse(input.ToString());

        // 打印生产者数量
        StringBuilder log = new StringBuilder("Producer's Number: ");

        log.Append(producerNum);
        Console.WriteLine(log);

        // 打印消费者数量
        log.Clear();
        log.Append("Consumer's Number: ").Append(consumerNum);
        Console.WriteLine(log);

        // 实例化缓冲区
        QueueProduces produces = new QueueProduces();

        // 根据生产者数量开启线程
        for (int i = 0; i < producerNum; i++)
        {
            // 线程实例化
            Thread t = new Thread(ProducerThread);

            // 线程参数实例化
            Parameter p = new Parameter(i.ToString(), produces);

            // 启动线程
            t.Start(p);
        }

        // 根据消费者数量开启线程
        for (int i = 0; i < consumerNum; i++)
        {
            // 线程实例化
            Thread t = new Thread(ConsumeThread);

            // 线程参数实例化
            Parameter p = new Parameter(i.ToString(), produces);

            // 启动线程
            t.Start(p);
        }

        // 暂停
        Console.ReadLine();
    }
示例#3
0
    /// <summary>
    /// 消费者线程
    /// </summary>
    /// <param name="parameter"></param>
    void ConsumeThread(object parameter)
    {
        // 拿到参数
        Parameter par = parameter as Parameter;

        // 消费者名字
        string name = par.Name;

        // 实例化消费者
        Consumer c = new Consumer(name);

        // 拿到缓冲区
        QueueProduces produces = par.Produces;

        // 打印日志
        StringBuilder log = new StringBuilder("Consumer ");

        log.Append("Name: ").Append(name);
        Console.WriteLine(log);

        // 开始消费
        while (true)
        {
            Produce produce = produces.Get();
            if (null != produce)
            {
                int timeOfConsume = produce.TimeOfConsume;
                Thread.Sleep(timeOfConsume);

                // 打印日志
                log.Clear();
                log = new StringBuilder("Consume ");
                log.Append("Name: ").Append(produce.Name);
                Console.WriteLine(log);
            }
        }
    }
示例#4
0
 // 构造函数
 public Parameter(String name, QueueProduces produces)
 {
     Name     = name;
     Produces = produces;
 }