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)
                    {

                    }
                }
            }

        }
  • 相关阅读:
    PyTorch之前向传播函数自动调用forward
    pytorch 调用forward 的具体流程
    Xcode5下使用纯代码构建简单的HelloWorld程序
    浅谈iOS 5的StoryBoard
    iOS单例
    instancetype 对比 id 的好处
    JSP的7个动作指令
    IOS UIView子类UIScrollView
    XCODE4.6从零开始添加视图
    NSSet类型 以及与NSArray区别
  • 原文地址:https://www.cnblogs.com/shidengyun/p/5600942.html
Copyright © 2011-2022 走看看