我的CPU 都转不过来拉!!!

解决方案 »

  1.   


    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Threading;namespace WindowsApplication274
    {
        public partial class Form1 : Form
        {
            static int N = 10 + 1; //10+1把椅子
            static int Empty = N;
            static bool IsSleeping = true;
            ListBox LB = new ListBox();
            Random R = new Random();        bool IsCreateNewCustomer = true;        public Form1()
            {
                InitializeComponent();            LB.Parent = this;
                LB.Dock = DockStyle.Fill;            this.Shown += new EventHandler(Form1_Shown);
            }        void Form1_Shown(object sender, EventArgs e)
            {
                new Thread(new ThreadStart(CreateNewCustomer)).Start();
                new Thread(new ThreadStart(WorkerAction)).Start();
            }        void DoAppendEvent(String Event)
            {
                LB.Items.Add(Event);
            }        void CreateNewCustomer()
            {
                while (IsCreateNewCustomer)
                {
                    new Thread(new ThreadStart(NewCustomer)).Start();
                    Thread.Sleep(R.Next(50));
                }
            }
            
            static Object Obj = new Object();
                
            void NewCustomer()
            {
                Action<String> AppendEvent = new Action<String>(DoAppendEvent);
                
                lock(Obj)
                {                if (IsSleeping)
                    {
                        IsSleeping = false;
                        this.Invoke(AppendEvent, new Object[] { "顾客叫醒理发师" });
                    }                if (Empty == 0)
                        this.Invoke(AppendEvent, new Object[] { "没空位了,顾客走了" });
                    else
                        this.Invoke(AppendEvent, new Object[] { "顾客坐在第"
                        +(N-Empty+1).ToString()+"把椅子上等待理发。还剩"
                        + (Empty---1).ToString() + "把空椅子" });
                }
            }        void WorkerAction()
            {
                Action<String> AppendEvent = new Action<String>(DoAppendEvent);            while (true)
                    lock (Obj)
                    {
                        if (!IsSleeping)
                            if (Empty == N)
                            {
                                IsSleeping = true;
                                this.Invoke(AppendEvent, new Object[] { "客户都服务完了,理发师开始睡觉" });
                            }
                            else
                            {
                                this.Invoke(AppendEvent, new Object[] { "理发师开始为坐在第"+(N-Empty).ToString()
                                    +"把椅子上的顾客理发"});
                                Thread.Sleep(R.Next(55));
                                Empty++;
                            }
                    }
            }
        }
    }顾客叫醒理发师
    顾客坐在第1把椅子上等待理发。还剩10把空椅子
    理发师开始为坐在第1把椅子上的顾客理发
    顾客坐在第1把椅子上等待理发。还剩10把空椅子
    理发师开始为坐在第1把椅子上的顾客理发
    顾客坐在第1把椅子上等待理发。还剩10把空椅子
    理发师开始为坐在第1把椅子上的顾客理发
    客户都服务完了,理发师开始睡觉
    顾客叫醒理发师
    顾客坐在第1把椅子上等待理发。还剩10把空椅子
    理发师开始为坐在第1把椅子上的顾客理发
    客户都服务完了,理发师开始睡觉
    顾客叫醒理发师
    顾客坐在第1把椅子上等待理发。还剩10把空椅子
    理发师开始为坐在第1把椅子上的顾客理发
    客户都服务完了,理发师开始睡觉
    顾客叫醒理发师
    顾客坐在第1把椅子上等待理发。还剩10把空椅子
    理发师开始为坐在第1把椅子上的顾客理发
    顾客坐在第1把椅子上等待理发。还剩10把空椅子
    理发师开始为坐在第1把椅子上的顾客理发
    顾客坐在第1把椅子上等待理发。还剩10把空椅子
    顾客坐在第2把椅子上等待理发。还剩9把空椅子
    理发师开始为坐在第2把椅子上的顾客理发
    理发师开始为坐在第1把椅子上的顾客理发
    顾客坐在第1把椅子上等待理发。还剩10把空椅子
    理发师开始为坐在第1把椅子上的顾客理发
    顾客坐在第1把椅子上等待理发。还剩10把空椅子
    顾客坐在第2把椅子上等待理发。还剩9把空椅子
    理发师开始为坐在第2把椅子上的顾客理发
    顾客坐在第2把椅子上等待理发。还剩9把空椅子
    顾客坐在第3把椅子上等待理发。还剩8把空椅子
    理发师开始为坐在第3把椅子上的顾客理发
    顾客坐在第3把椅子上等待理发。还剩8把空椅子
    顾客坐在第4把椅子上等待理发。还剩7把空椅子
    顾客坐在第5把椅子上等待理发。还剩6把空椅子
    理发师开始为坐在第5把椅子上的顾客理发
    理发师开始为坐在第4把椅子上的顾客理发
    顾客坐在第4把椅子上等待理发。还剩7把空椅子
    顾客坐在第5把椅子上等待理发。还剩6把空椅子
    理发师开始为坐在第5把椅子上的顾客理发
    理发师开始为坐在第4把椅子上的顾客理发
    顾客坐在第4把椅子上等待理发。还剩7把空椅子
    理发师开始为坐在第4把椅子上的顾客理发
    顾客坐在第4把椅子上等待理发。还剩7把空椅子
    顾客坐在第5把椅子上等待理发。还剩6把空椅子
    顾客坐在第6把椅子上等待理发。还剩5把空椅子
    理发师开始为坐在第6把椅子上的顾客理发
    顾客坐在第6把椅子上等待理发。还剩5把空椅子
    理发师开始为坐在第6把椅子上的顾客理发
    顾客坐在第6把椅子上等待理发。还剩5把空椅子
    理发师开始为坐在第6把椅子上的顾客理发
    理发师开始为坐在第5把椅子上的顾客理发
    顾客坐在第5把椅子上等待理发。还剩6把空椅子
    理发师开始为坐在第5把椅子上的顾客理发
    顾客坐在第5把椅子上等待理发。还剩6把空椅子
    顾客坐在第6把椅子上等待理发。还剩5把空椅子
    理发师开始为坐在第6把椅子上的顾客理发
    顾客坐在第6把椅子上等待理发。还剩5把空椅子
    顾客坐在第7把椅子上等待理发。还剩4把空椅子
    理发师开始为坐在第7把椅子上的顾客理发
    顾客坐在第7把椅子上等待理发。还剩4把空椅子
    理发师开始为坐在第7把椅子上的顾客理发
    顾客坐在第7把椅子上等待理发。还剩4把空椅子
    理发师开始为坐在第7把椅子上的顾客理发
    顾客坐在第7把椅子上等待理发。还剩4把空椅子
    顾客坐在第8把椅子上等待理发。还剩3把空椅子
    顾客坐在第9把椅子上等待理发。还剩2把空椅子
    顾客坐在第10把椅子上等待理发。还剩1把空椅子
    理发师开始为坐在第10把椅子上的顾客理发
    顾客坐在第10把椅子上等待理发。还剩1把空椅子
    顾客坐在第11把椅子上等待理发。还剩0把空椅子
    理发师开始为坐在第11把椅子上的顾客理发
    顾客坐在第11把椅子上等待理发。还剩0把空椅子
    理发师开始为坐在第11把椅子上的顾客理发
    顾客坐在第11把椅子上等待理发。还剩0把空椅子
    理发师开始为坐在第11把椅子上的顾客理发
    顾客坐在第11把椅子上等待理发。还剩0把空椅子
    理发师开始为坐在第11把椅子上的顾客理发
    理发师开始为坐在第10把椅子上的顾客理发
    顾客坐在第10把椅子上等待理发。还剩1把空椅子
    理发师开始为坐在第10把椅子上的顾客理发
    理发师开始为坐在第9把椅子上的顾客理发
    顾客坐在第9把椅子上等待理发。还剩2把空椅子
    顾客坐在第10把椅子上等待理发。还剩1把空椅子
    理发师开始为坐在第10把椅子上的顾客理发
    理发师开始为坐在第9把椅子上的顾客理发
    顾客坐在第9把椅子上等待理发。还剩2把空椅子
    顾客坐在第10把椅子上等待理发。还剩1把空椅子
    顾客坐在第11把椅子上等待理发。还剩0把空椅子
    理发师开始为坐在第11把椅子上的顾客理发
    理发师开始为坐在第10把椅子上的顾客理发
    顾客坐在第10把椅子上等待理发。还剩1把空椅子
    理发师开始为坐在第10把椅子上的顾客理发
    顾客坐在第10把椅子上等待理发。还剩1把空椅子
    理发师开始为坐在第10把椅子上的顾客理发
    理发师开始为坐在第9把椅子上的顾客理发
    理发师开始为坐在第8把椅子上的顾客理发
    理发师开始为坐在第7把椅子上的顾客理发
    顾客坐在第7把椅子上等待理发。还剩4把空椅子
    理发师开始为坐在第7把椅子上的顾客理发
    顾客坐在第7把椅子上等待理发。还剩4把空椅子
    理发师开始为坐在第7把椅子上的顾客理发
    顾客坐在第7把椅子上等待理发。还剩4把空椅子
    顾客坐在第8把椅子上等待理发。还剩3把空椅子
    理发师开始为坐在第8把椅子上的顾客理发
    顾客坐在第8把椅子上等待理发。还剩3把空椅子
    顾客坐在第9把椅子上等待理发。还剩2把空椅子
    理发师开始为坐在第9把椅子上的顾客理发
    顾客坐在第9把椅子上等待理发。还剩2把空椅子
    顾客坐在第10把椅子上等待理发。还剩1把空椅子
    理发师开始为坐在第10把椅子上的顾客理发
    顾客坐在第10把椅子上等待理发。还剩1把空椅子
    理发师开始为坐在第10把椅子上的顾客理发
    顾客坐在第10把椅子上等待理发。还剩1把空椅子
    顾客坐在第11把椅子上等待理发。还剩0把空椅子
    理发师开始为坐在第11把椅子上的顾客理发
    顾客坐在第11把椅子上等待理发。还剩0把空椅子
    没空位了,顾客走了
    理发师开始为坐在第11把椅子上的顾客理发
    顾客坐在第11把椅子上等待理发。还剩0把空椅子
    没空位了,顾客走了
    理发师开始为坐在第11把椅子上的顾客理发
    理发师开始为坐在第10把椅子上的顾客理发
    顾客坐在第10把椅子上等待理发。还剩1把空椅子
    理发师开始为坐在第10把椅子上的顾客理发
    顾客坐在第10把椅子上等待理发。还剩1把空椅子
    理发师开始为坐在第10把椅子上的顾客理发
    顾客坐在第10把椅子上等待理发。还剩1把空椅子
    顾客坐在第11把椅子上等待理发。还剩0把空椅子
    理发师开始为坐在第11把椅子上的顾客理发
    顾客坐在第11把椅子上等待理发。还剩0把空椅子
    理发师开始为坐在第11把椅子上的顾客理发
    顾客坐在第11把椅子上等待理发。还剩0把空椅子
    理发师开始为坐在第11把椅子上的顾客理发
    理发师开始为坐在第10把椅子上的顾客理发
    顾客坐在第10把椅子上等待理发。还剩1把空椅子
    顾客坐在第11把椅子上等待理发。还剩0把空椅子
    理发师开始为坐在第11把椅子上的顾客理发
    理发师开始为坐在第10把椅子上的顾客理发
    顾客坐在第10把椅子上等待理发。还剩1把空椅子
    理发师开始为坐在第10把椅子上的顾客理发
    顾客坐在第10把椅子上等待理发。还剩1把空椅子
    顾客坐在第11把椅子上等待理发。还剩0把空椅子
    理发师开始为坐在第11把椅子上的顾客理发
    顾客坐在第11把椅子上等待理发。还剩0把空椅子
    理发师开始为坐在第11把椅子上的顾客理发
    顾客坐在第11把椅子上等待理发。还剩0把空椅子
    理发师开始为坐在第11把椅子上的顾客理发
    顾客坐在第11把椅子上等待理发。还剩0把空椅子
    没空位了,顾客走了
    理发师开始为坐在第11把椅子上的顾客理发
    顾客坐在第11把椅子上等待理发。还剩0把空椅子
    没空位了,顾客走了
    没空位了,顾客走了
    没空位了,顾客走了
    理发师开始为坐在第11把椅子上的顾客理发
    顾客坐在第11把椅子上等待理发。还剩0把空椅子
    理发师开始为坐在第11把椅子上的顾客理发
    顾客坐在第11把椅子上等待理发。还剩0把空椅子
    没空位了,顾客走了
    没空位了,顾客走了
    理发师开始为坐在第11把椅子上的顾客理发
    理发师开始为坐在第10把椅子上的顾客理发
    顾客坐在第10把椅子上等待理发。还剩1把空椅子
    顾客坐在第11把椅子上等待理发。还剩0把空椅子
    理发师开始为坐在第11把椅子上的顾客理发
    理发师开始为坐在第10把椅子上的顾客理发
    顾客坐在第10把椅子上等待理发。还剩1把空椅子
    顾客坐在第11把椅子上等待理发。还剩0把空椅子
    理发师开始为坐在第11把椅子上的顾客理发
    理发师开始为坐在第10把椅子上的顾客理发
    顾客坐在第10把椅子上等待理发。还剩1把空椅子
    顾客坐在第11把椅子上等待理发。还剩0把空椅子
    理发师开始为坐在第11把椅子上的顾客理发
    理发师开始为坐在第10把椅子上的顾客理发
    顾客坐在第10把椅子上等待理发。还剩1把空椅子
    顾客坐在第11把椅子上等待理发。还剩0把空椅子
    没空位了,顾客走了
    没空位了,顾客走了
    理发师开始为坐在第11把椅子上的顾客理发
    顾客坐在第11把椅子上等待理发。还剩0把空椅子
    没空位了,顾客走了
    没空位了,顾客走了
    没空位了,顾客走了
    理发师开始为坐在第11把椅子上的顾客理发