Sample code to illustrate a deadlock by using lock(this)

前端 未结 6 1171
我在风中等你
我在风中等你 2020-12-23 20:57

I\'ve read several articles and posts that say that lock(this), lock(typeof(MyType)), lock(\"a string\") are all bad practice because

6条回答
  •  甜味超标
    2020-12-23 21:31

    class Character
    {
        public Character Other;
        public string Name;
        private object locker = new object();
    
        public Character(string name)
        {
            Name = name;
        }
    
        public void Go()
        {
            lock (locker)
            {
                Thread.Sleep(1000);
                Console.WriteLine("go in {0}", Name);
                Other.Go();
            }
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            Character a = new Character("A");
            Character b = new Character("B");
            a.Other = b;
            b.Other = a;
    
            new Thread(a.Go).Start();
            b.Go();
    
            Console.ReadLine();
        }
    }
    

提交回复
热议问题