zoukankan      html  css  js  c++  java
  • 多线程07-Monitor.TryEnter

        class Program
        {
            static void Main()
            {
                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("Acquired a protected resourece success");
                    }
                    else
                    {
                        Console.WriteLine("time out to get a resource");
                    }
                }
                new Thread(() => LockTooMuch(lock1, lock2)).Start();

                lock (lock2)
                {
                    Console.WriteLine("this will be a deadlock");
                    Thread.Sleep(1000);
                    lock (lock1)
                    {
                        Console.WriteLine("Acquired a protected resourece success");
                    }
                }


            }
            static void LockTooMuch(object lock1, object lock2)
            {
                lock (lock1)
                {
                    Thread.Sleep(1000);
                    lock (lock2)
                    {

                    }
                }
            }

        }
  • 相关阅读:
    虚拟化技术KVM
    Rsync+Inotify实现文件自动同步
    第一次使用博客园
    kmp算法分析
    程序可移植性分析(一)数据类型
    strings用法小记
    size用法小记
    readelf用法小记
    nm用法小记
    ar用法小记
  • 原文地址:https://www.cnblogs.com/shidengyun/p/5600942.html
Copyright © 2011-2022 走看看