闽公网安备 35020302035485号
循环等待:存在一个等待资源的循环,即线程集合{P1, P2, ..., Pn}中的P1正在等待由P2占用的资源,P2正在等待由P3占用的资源,...,Pn正在等待由P1占用的资源。
using System;
using System.Threading;
class DeadlockExample
{
private static readonly object Lock1 = new object();
private static readonly object Lock2 = new object();
public static void Main()
{
Thread thread1 = new Thread(new ThreadStart(ThreadFunction1));
Thread thread2 = new Thread(new ThreadStart(ThreadFunction2));
thread1.Start();
thread2.Start();
thread1.Join();
thread2.Join();
}
public static void ThreadFunction1()
{
lock (Lock1)
{
Console.WriteLine("Thread 1: Holding lock 1...");
Thread.Sleep(100); // 模拟工作
Console.WriteLine("Thread 1: Waiting for lock 2...");
lock (Lock2)
{
Console.WriteLine("Thread 1: Holding lock 1 & 2...");
}
}
}
public static void ThreadFunction2()
{
lock (Lock2)
{
Console.WriteLine("Thread 2: Holding lock 2...");
Thread.Sleep(100); // 模拟工作
Console.WriteLine("Thread 2: Waiting for lock 1...");
lock (Lock1)
{
Console.WriteLine("Thread 2: Holding lock 2 & 1...");
}
}
}
}
在上面的代码中,线程1首先获得Lock1,然后尝试获得Lock2。同时,线程2首先获得Lock2,然后尝试获得Lock1。如果两个线程几乎同时启动,它们会进入死锁状态,因为每个线程都在等待另一个线程释放它所需要的锁。