专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

c#多线程控制

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/2/14 0:32:51       共计:3688 浏览
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();//解锁买书线程
            }
        }
    }
版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:【C#】Action,Func,Predicate的简单使用 | ·下一条:Solr分页与高亮(使用SolrNet实现)

Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有