为什么不';t父对象使子对象死锁

本文关键字:对象 死锁 为什么不 | 更新日期: 2023-09-27 18:22:03

我知道这是一个单线程示例,这将锁定在一个多线程示例中。但是,考虑到执行序列,锁不应该被父级占用,从而使子级即使在单线程情况下也会挨饿吗?

class Program
{
    static readonly object Lock = new object();
    static void Main(string[] args)
    {
        Console.WriteLine("Main start");
        Parent();
        Console.WriteLine("Main end");
        Console.ReadLine();
    }
    static void Parent()
    {
        lock (Lock)
        {
            Console.WriteLine("Parent start");
            Child();
            Console.WriteLine("Parent end");
        }
    }
    static void Child()
    {
        lock (Lock)
        {
            Console.WriteLine("Child start");
            Console.WriteLine("Child end");
        }
    }
}

控制台输出

主启动
父启动
子启动
子端
父端
主端

为什么不';t父对象使子对象死锁

如果线程获取了锁,那么它可以再次获取锁。

lock关键字确保一个线程不会进入关键代码的部分,而另一个线程在关键部分中。如果另一个线程试图输入锁定的代码,它将等待、阻止,直到对象被释放。

同步只是意味着两个不同的"线程"不能访问受同一锁保护的部分。然而,这是一个单一的线程。线程拥有锁,因此允许它继续。