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); } } } }