• c#多线程控制


      class Program
        {
            static  Thread SeekBookThread = new Thread(new ThreadStart(TestMutiThrd.SeekProc));
            static  Thread payMoneyThread = new Thread(new ThreadStart(TestMutiThrd.PayMoneyProc));
            static Thread getBookThread = new Thread(new ThreadStart(TestMutiThrd.GetBookProc));
            static void Main(string[] args)
            { 
            
                SeekBookThread.Name = "扫描线程";
                SeekBookThread.Start();
    
    
          
                payMoneyThread.Name = "付钱线程";
                payMoneyThread.Start();
    
    
            
                getBookThread.Name = "取书线程";
                getBookThread.Start();
    
    
                for (int i = 1; i <= TestMutiThrd.numIterations; i++)
                {
                    Console.WriteLine("买书线程:书本{0}", i);
                    TestMutiThrd.number = i;
                    //Signal that a value has been written.
                    TestMutiThrd.SekEvent.Set();//解锁扫描线程
                    TestMutiThrd.buyResetEvent.WaitOne();//等待买书所有线程执行结束,才能继续
                    Thread.Sleep(0);
                }
                Thread.Sleep(1000);
                Console.ReadLine();
                SeekBookThread.Abort();
                payMoneyThread.Abort();
                getBookThread.Abort();
            }
        }
    
    
        public class TestMutiThrd
        {
            public const int numIterations = 50;
            //买书
            public static AutoResetEvent buyResetEvent = new AutoResetEvent(false);
            //扫描
            public static AutoResetEvent SekEvent = new AutoResetEvent(false);
            //付钱
            public static AutoResetEvent PayEvent = new AutoResetEvent(false);
            //取书
            public static AutoResetEvent GetEvent = new AutoResetEvent(false);
            //付钱和取书
            public static ManualResetEvent PayGetEvent = new ManualResetEvent(false);
    
    
            public static ReaderWriterLock RWLock = new ReaderWriterLock();
            //static ManualResetEvent myResetEvent = new ManualResetEvent(false);
            //static ManualResetEvent ChangeEvent = new ManualResetEvent(false);
            public static int number; //这是关键资源
            public static TestMutiThrd OTestMutiThrd = new TestMutiThrd();
    
    
            public int NumIterations
            {
                get
                {
                    return numIterations;
                }
            }
    
    
            /// <summary>
            /// 扫描过程
            /// </summary>
            public static void SeekProc()
            {
                while (true) //(thread.ThreadState != ThreadState.Aborted)
                {
                    SekEvent.WaitOne();
                    //SekEvent.Reset();
                    Console.WriteLine("{0}:书本{1}", Thread.CurrentThread.Name, number);
                    Thread.Sleep(0);
                    PayEvent.Set();//解锁付款线程
                    //PayGetEvent.Set();//同时解锁付款和取书线程
                }
            }
    
    
            /// <summary>
            /// 付钱过程
            /// </summary>
            public static void PayMoneyProc()
            {
                while (true)
                {
                    PayEvent.WaitOne();
                    Console.WriteLine("{0}:书本{1}", Thread.CurrentThread.Name, number);
                    Thread.Sleep(10);
                    GetEvent.Set();//解锁取书线程
                }
            }
    
    
            /// <summary>
            /// 取书过程
            /// </summary>
            public static void GetBookProc()
            {
                while (true)
                {
                    GetEvent.WaitOne();         
                    Console.WriteLine("{0}:书本{1}", Thread.CurrentThread.Name, number);
                    Console.WriteLine("------------------------------------------");
                    Thread.Sleep(10);
                    buyResetEvent.Set();//解锁买书线程
                }
            }
        }
  • 相关阅读:
    虚拟机LUN扩大后,重新分区
    rm: cannot remove `/home/cn0000/log/formlog.20140417': Read-only file system
    sybase 备份和恢复
    全表扫描计算成本
    标量子查询 子查询执行次数计算公式
    left join 关联条件位置
    动态SQL使用绑定变量
    如何在SQLServer中处理每天四亿三千万记录的
    移动端UI一致性解决方案
    工业互联网中MES系统的重要性
  • 原文地址:https://www.cnblogs.com/weifeng123/p/10036513.html
Copyright © 2020-2023  润新知