首页 > 其他 > 详细

死锁的例子

时间:2021-09-01 12:13:17      阅读:25      评论:0      收藏:0      [点我收藏+]
        static object locker1 = new object();
        static object locker2 = new object();


        static void Main(string[] args)
        {

            var taskList = new Task[2];
            taskList[0] = Task.Run(() =>
            {
                Console.WriteLine("线程1 id:" + Thread.CurrentThread.ManagedThreadId);
                Console.WriteLine("线程1准备获取锁1");
                lock (locker1)
                {
                    Console.WriteLine("线程1获取了锁1");
                    Thread.Sleep(3000);

                    Console.WriteLine("线程1准备获取锁2");
                    lock (locker2)
                    {
                        Console.WriteLine("线程1获取了锁2");
                    }
                }

            });
            taskList[1] = Task.Run(() =>
            {
                Console.WriteLine("线程2 id:" + Thread.CurrentThread.ManagedThreadId);
                Console.WriteLine("线程2准备获取锁2");
                lock (locker2)
                {
                    Console.WriteLine("线程2获取了锁2");
                    Thread.Sleep(3000);

                    Console.WriteLine("线程2准备获取锁1");
                    lock (locker1)
                    {
                        Console.WriteLine("线程2获取了锁1");
                    }
                }

            });

            var finished = Task.WaitAll(taskList, 1000 * 10);
            if (finished)
            {
                Console.WriteLine("没有发生死锁");
            }
            else
            {
                Console.WriteLine("发生了死锁");
            }

            Console.ReadLine();
        }

  

死锁的例子

原文:https://www.cnblogs.com/chinasoft/p/15206517.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!