zoukankan      html  css  js  c++  java
  • 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();//解锁买书线程
                }
            }
        }
  • 相关阅读:
    单例模式 (线程安全)
    Hystrix (容错,回退,降级,缓存)
    Feign负载均衡
    Ribbon远程调用
    Eureka服务注册与发现
    适配器模式
    docker学习(二)
    使用Eclipse进行远程调试(转)
    docker学习(一)
    Mysql批量更新的一个坑-&allowMultiQueries=true允许批量更新(转)
  • 原文地址:https://www.cnblogs.com/weifeng123/p/10036513.html
Copyright © 2011-2022 走看看