C#死锁产生

来源:百度知道 编辑:UC知道 时间:2024/09/18 04:22:19
谁能给个能产生死锁的程序
我操作系统学的不好 看 c#高级编程 死锁这块怎么也做不出来死锁的代码

死锁的表现为闭环的状态依赖,简单的说就是A等待B的状态为B1时才会将状态设为A1,而B等待A的状态为A1的时候才会将状态设为B1.出现这种逻辑一般是在多线程编程,而且多线程公用同一资源的时候。一下的例子里面就是典型的死锁,主线程等待ResourceFlag2然后设置ResourceFlag1,辅助线程等待ResourceFlag1然后设置ResourceFlag2.

static bool ResourceFlag1 = false;
static bool ResourceFlag2 = false;

private void Do1()
{
while (!Form1.ResourceFlag1)
{
System.Threading.Thread.Sleep(1000);
}
Form1.ResourceFlag2 = true;
}

private void Do2()
{
while (!Form1.ResourceFlag2)
{
System.Threading.Thread.Sleep(1000);
}
Form1.ResourceFlag1 = true;
}

private void Test()
{
Do1();
System.Threading.Thread th=new System.Threading.Thread(new System.Threading.ThreadStart(this.Do2));