using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading;
namespace ConsoleApplication1 { public class Program { static void Main(string[] args) { SyncStack ss = new SyncStack(); Producer p = new Producer(ss); Consumer c = new Consumer(ss); new Thread(p.run).Start(); new Thread(c.run).Start(); } } public class Cake { int id; public Cake(int id) { this.id = id; } public String toString() { return "Cake" + id; } } public class SyncStack { int index = 0; Cake[] arrWT = new Cake[4]; public void push(Cake wt) { try { Monitor.Enter(this); while (index == arrWT.Length) { try {
Console.WriteLine("已经生产满了!"); Monitor.Wait(this); } catch (Exception ex) { Console.WriteLine(ex.Message); } } Monitor.Pulse(this); arrWT[index] = wt; index++; } finally { Monitor.Exit(this); } } public Cake pop() { try { Monitor.Enter(this); while (index == 0) { try { Console.WriteLine("已经消费空了!"); Monitor.Wait(this); } catch (Exception ex) { Console.WriteLine(ex.Message); } } Monitor.Pulse(this); index--; return arrWT[index]; } finally { Monitor.Exit(this); } } } public class Producer {
private bool flag = true; private SyncStack m_syncStack = null; public Producer(SyncStack ss) { this.m_syncStack = ss; } public void run() { int i = 0; while (flag) { Cake wt = new Cake(i); i++; m_syncStack.push(wt); Console.WriteLine("生产了:" + wt.toString()); } } public void Shutdown() { flag = false; } } public class Consumer { private bool flag = true; private SyncStack m_syncStack = null; public Consumer(SyncStack ss) { this.m_syncStack = ss; } public void run() { while (flag) {
Cake wt = m_syncStack.pop(); Console.WriteLine("消费了:" + wt.toString()); try { Thread.Sleep(2000); } catch (Exception ex) { Console.WriteLine(ex.Message); } } } public void Shutdown() { flag = false; } } }
|
请发表评论