• c#线程--生产者和消费者


    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;
    using System.Security;
    using System.Text;
    using System.Threading;
    
    namespace ConsoleApp
    {
        class Test
        {
    
            static void Main()
            {
                product pro = new product();
                setProduct set = new setProduct(pro, 100);
                getProduct get = new getProduct(pro, 100);
    
                Thread producer = new Thread(new ThreadStart(set.run));
                Thread consumer = new Thread(new ThreadStart(get.run));
                producer.Start();
                consumer.Start();
                Console.ReadLine();
            }
        }
    
        class getProduct
        {
            private product pro;
            private int quality = 0;
            public getProduct(product pro,int request)
            {
                this.pro = pro;
                quality = request;
            }
            public void run()
            {
                for (int i = 0; i < quality; i++)
                {
                    pro.getProduct();
                }
            }
        }
    
        class setProduct
        {
            private product pro;
            private int quality = 0;
            public setProduct(product pro, int request)
            {
                this.pro = pro;
                quality = request;
            }
            public void run()
            {
                for (int i = 0; i < quality; i++)
                {
                    pro.setProduct(i);
                }
            } 
        }
    
        class product
        {
            private int cellContents;
            private bool setflage = false;
            public int setProduct(int n)
            {
                lock (this)
                {
                    if (setflage)
                    {
                            Monitor.Wait(this);
                    }
                    Console.WriteLine("生产中。。。"+n);
                    cellContents = n;
                    setflage = true;
                    Monitor.Pulse(this);
                }
                return cellContents;
            }
            public void getProduct()
            {
                lock (this)
                {
                    if (!setflage)
                    {
                       Monitor.Wait(this);
                    }
                    Console.WriteLine("消耗中。。。" + cellContents);
                    setflage = false;
                    Monitor.Pulse(this);
                }
            }
        }
    }
    View Code
  • 相关阅读:
    关于C++顺序容器一致初始化的问题
    44. 通配符匹配(Wildcard Matching)
    76. 最小覆盖子串(Minimum Window Substring)
    72. 编辑距离(Edit Distance)
    首入大观园
    删除链表的倒数第N个节点
    目标和
    克隆图
    最长回文子串
    旋转矩阵
  • 原文地址:https://www.cnblogs.com/anbylau2130/p/3184315.html
Copyright © 2020-2023  润新知