苏飞论坛

标题: C#线程同步之生产者消费者经典练习 [打印本页]

作者: Monn    时间: 2014-10-19 22:27
标题: C#线程同步之生产者消费者经典练习
学习线程同步,很经典的一个例子。

[C#] 纯文本查看 复制代码
class Program
    {
        static void Main(string[] args)
        {
            //定义产品池
            product[] productpool = new product[100];
            //定义产品索引
            int index = 0;
            //定义锁定对象
            object lockobj = new object();
              
            #region 生产与消费
  
            //定义5个生产者
            for (int i = 0; i < 5; i++)
            {
                new Thread(() =>
                {
                    while (true)
                    {
                        //执行到这里的时候,当前线程停下来等待拿到lockobj对象上面对应的锁
                        lock (lockobj)//lock一个引用类型对象
                        {
                            if (index < 100)
                            {
                                product p = new product();
                                productpool[index] = p;
                                Console.WriteLine("生产一个产品:" + Thread.CurrentThread.ManagedThreadId);
                                index++;
                            }
                        }
                        Thread.Sleep(100);
                    }
                }).Start();
            }
  
            //定义10个消费者
            for (int i = 0; i < 10; i++)
            {
                new Thread(() =>
                {
                    while (true)
                    {
                        lock (lockobj)
                        {
                            if (index > 0)
                            {
                                productpool[index - 1] = null;//消费一个产品
                                Console.WriteLine("消费一个产品:" + Thread.CurrentThread.ManagedThreadId);
                                index--;
                            }
                        }
                        Thread.Sleep(500);
                    }
                }).Start();
            }
            #endregion
  
            Console.ReadKey();
        }
    }
    class product
    {
        /// <summary>
        /// 产品名称
        /// </summary>
        string productName { get; set; }
    }


作者: ching126    时间: 2014-10-20 07:56
我只是路过打酱油的。
作者: 站长苏飞    时间: 2014-10-20 08:19

作者: Cheungnotes    时间: 2014-10-20 11:22
看过帖子回复一下是个好习惯
作者: 水手    时间: 2014-10-20 15:27
强烈支持楼主ing……
作者: 纳兰小寒    时间: 2015-2-12 15:42
受教了学习中……
作者: baichong6730165    时间: 2015-2-15 10:33
我只是路过打酱油的。
作者: mingsn    时间: 2016-9-21 17:41
强烈支持楼主ing……
作者: jackluckly    时间: 2016-9-24 00:42
强烈支持楼主ing……




欢迎光临 苏飞论坛 (http://www.sufeinet.com/) Powered by Discuz! X3.4