static object locker1 = new object();
static object locker2 = new object();
static void Main(string[] args)
{
var taskList = new Task[2];
taskList[0] = Task.Run(() =>
{
Console.WriteLine("线程1 id:" + Thread.CurrentThread.ManagedThreadId);
Console.WriteLine("线程1准备获取锁1");
lock (locker1)
{
Console.WriteLine("线程1获取了锁1");
Thread.Sleep(3000);
Console.WriteLine("线程1准备获取锁2");
lock (locker2)
{
Console.WriteLine("线程1获取了锁2");
}
}
});
taskList[1] = Task.Run(() =>
{
Console.WriteLine("线程2 id:" + Thread.CurrentThread.ManagedThreadId);
Console.WriteLine("线程2准备获取锁2");
lock (locker2)
{
Console.WriteLine("线程2获取了锁2");
Thread.Sleep(3000);
Console.WriteLine("线程2准备获取锁1");
lock (locker1)
{
Console.WriteLine("线程2获取了锁1");
}
}
});
var finished = Task.WaitAll(taskList, 1000 * 10);
if (finished)
{
Console.WriteLine("没有发生死锁");
}
else
{
Console.WriteLine("发生了死锁");
}
Console.ReadLine();
}