为什么不';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");
}
}
}
控制台输出
主启动
父启动
子启动
子端
父端
主端
如果线程获取了锁,那么它可以再次获取锁。
lock关键字确保一个线程不会进入关键代码的部分,而另一个线程在关键部分中。如果另一个线程试图输入锁定的代码,它将等待、阻止,直到对象被释放。
同步只是意味着两个不同的"线程"不能访问受同一锁保护的部分。然而,这是一个单一的线程。线程拥有锁,因此允许它继续。