网站建设 郑州网站建设 网站制作 网页设计 网站设计 郑州建网站 - 爱易在线

网站地图 | 网站Tags标签 | RSS订阅 | 加入收藏
您的位置:网站首页 > 博客笔记 > 技术交流 > 正文 技术交流相关信息

C#线程同步之生产者消费者经典练习

作者:郑州网站建设 2014/10/19 21:10:10 点击: 来源:
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; }
    }


分享到:

上一篇:C#免注册调用COM+(ActiveX)组件

下一篇:SnippetEditor2.1(vs2012&vs2013可用版)

技术交流推荐阅读

用户评论

最新博文

热门排行

推荐信息

关于爱之易| 付款方式| 联系我们| 网站地图| 网站Tags标签 | RSS订阅