Multithreading 明显的死锁-如何适当地修复此问题
在所有线程中,始终以相同的顺序输入锁。另请参见,即功能B需要:Multithreading 明显的死锁-如何适当地修复此问题,multithreading,Multithreading,在所有线程中,始终以相同的顺序输入锁。另请参见,即功能B需要: class Program { static void Main(string[] args) { Thread thread1 = new Thread((ThreadStart)DLockSample.FunctionA); Thread therad2 = new Thread((ThreadStart)DLockSample.Functi
class Program
{
static void Main(string[] args)
{
Thread thread1 = new Thread((ThreadStart)DLockSample.FunctionA);
Thread therad2 = new Thread((ThreadStart)DLockSample.FunctionB);
thread1.Start();
therad2.Start();
}
}
public class DLockSample
{
static object object1 = new object();
static object object2 = new object();
public static void FunctionA()
{
lock (object1)
{
Thread.Sleep(1000);
lock (object2)
{
Thread.Sleep(1000);
Console.WriteLine("heart beat - object2");
}
}
}
public static void FunctionB()
{
lock (object2)
{
lock (object1)
{
Thread.Sleep(1000);
Console.WriteLine("heart beat - object1");
}
}
} }
这是一个很难解决的问题。以下是一些提示:
- 始终以相同的顺序锁定对象
- 如果无法以相同的顺序锁定,请使用对象的字段来保留顺序(例如,如果A.Id>B.Id,则始终在B之前锁定A)
public static void FunctionB()
{
lock (object1)
{
lock (object2)
...