我試圖創建一個死鎖的例子。我試了下面的代碼。但不是造成僵局,而是像魅力一樣。幫助我理解爲什麼它不會造成僵局。這段代碼中的變化會導致死鎖?多線程中的死鎖
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ReferenceTypes
{
class DeadLockExample
{
static int a;
static int b;
public static void Main(string[] args)
{
DeadLockExample.a = 20;
DeadLockExample.b = 30;
DeadLockExample d = new DeadLockExample();
Thread tA = new Thread(new ThreadStart(d.MethodA));
Thread tB = new Thread(new ThreadStart(d.MethodB));
tA.Start();
tB.Start();
Console.ReadLine();
}
private void MethodA()
{
lock (this)
{
Console.WriteLine(a);
Thread.Sleep(1000);
Console.WriteLine(b);
}
}
private void MethodB()
{
lock (this)
{
Console.WriteLine(b);
Thread.Sleep(1000);
Console.WriteLine(a);
}
}
}
}
除事實睡覺不保證* *發生死鎖(僅同步可以做到這一點),這是一個偉大的答案:) – 2010-08-19 23:37:19
我很欣賞的答案。謝謝。 – SaravananArumugam 2010-08-19 23:41:36
這是典型的死鎖例子。實際上,大多數死鎖看起來與此完全相同,除了鎖定採集在通過您甚至沒有意識到正在運行的線程上的計時器事件的回調進行路由後,堆棧跟蹤中通常至少有8次調用。 – 2010-08-19 23:45:13