Public class stateobject {
Int state = 5;
Public void changestate (INT loop)
{
If (State = 5)
{
State ++;
Trace. Assert (State = 6 ,"");
}
State = 5;
}
}
Public class samplethread
{
Public stateobject so1;
Pulbic stateobject SO2;
Public sampletrhead (stateobject O1, stateobject O2)
{
This. so1 = O1, this. SO2 = O2;
}
Public void deadlock ()
{
Int I = 0;
While (true)
{
Lock (so1)
{
Lock (SO2 ){
So1.changestate (I );
So2.changestate (I ++ );
Console. writeline ("still running, {0}", I );
}
}
}
}
Public void deadlock2 ()
{Int I = 0;
While (true)
{
Lock (SO2)
{
Lock (so1 ){
So1.changestate (I );
So2.changestate (I );
Console. writeline ("still running, {0}", I );
}
}
}
}
}
Stateobject state1 = new stateobject ();
Stateobject state2 = new stateobject ();
New thread (New samplethread (state1, state2). deadlock1). Start ();
New thread (New samplethread (state1, sate2). deadlock2). Start ();