【问题标题】:Why doesn't the parent deadlock the child? [duplicate]为什么父母不锁死孩子? [复制]
【发布时间】:2015-11-15 17:45:22
【问题描述】:

我知道这是一个单线程示例,这将锁定在多线程示例中。但是考虑到执行顺序,锁不应该被父级消耗,因此即使在单线程情况下也会饿死子级?

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");
        }
    }
}

控制台输出

主要开始
家长开始
儿童开始
子端
父端
主端

【问题讨论】:

标签: c# .net multithreading locking


【解决方案1】:

如果一个线程已经获得了锁,则它可以再次获得锁。

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

【讨论】:

    【解决方案2】:

    同步仅仅意味着两个不同的“线程”不能访问受同一个锁保护的部分。但是,这是一个单线程。线程拥有锁,因此可以继续。

    【讨论】:

      猜你喜欢
      • 2020-06-26
      • 2012-01-03
      • 2016-11-09
      • 1970-01-01
      • 2021-12-13
      • 2021-08-27
      • 1970-01-01
      • 2020-08-07
      • 1970-01-01
      相关资源
      最近更新 更多