C# Lock、Monitor避免死锁


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading;

namespace ConsoleApplication1 {  

   class Program     {  

       static void Main(string[] args)

        {    

           object lock1 = new object();  

           object lock2 = new object();

            new Thread(() => LockTooMuch(lock1, lock2)).Start();

            lock (lock2)

            {    

               Thread.Sleep(1000);      

            Console.WriteLine("Monitor.TryEnter allows not to get stuck,returning false after a specified timeout is elapsed");  

               if (Monitor.TryEnter(lock1, TimeSpan.FromSeconds(5)))

                {

                    Console.WriteLine("Acquires a protected resource successfully");

                }

                else

                {                    

      Console.WriteLine("timeout acquiring a resource!");

                }            

    }

 

            new Thread(() => LockTooMuch(lock1, lock2)).Start();

            Console.WriteLine("--------------------------------");

            lock (lock2)             {

                Console.WriteLine("This is a deadlock");

                Thread.Sleep(1000);

                lock (lock1)

                {                    

      Console.WriteLine("Acquired a protected resource successfully");

                }

            }

        }

        static void LockTooMuch(object lock1, object lock2)

        {

            lock (lock1)  

           {

                Thread.Sleep(1000);

                lock (lock2) ;

            }

        }

    }

}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM