资源访问冲突问题
internal class StateObject
{
private int state = 5;
public void ChangeState()
{
if (state == 5)
{
state++;
Console.WriteLine("state: " + state + " 线程ID:" + Thread.CurrentThread.ManageThreadId);
}
state = 5;
}
}
static void Main(string[] args)
{
StateObject state = new StateObject();
for (int i = 0; i < 100; i++)
{
Thread t = new Thread(state.ChangeState);
t.Start();
}
}
解决——加锁
internal class StateObject
{
private Object _lock = new Object();
private int state = 5;
public void ChangeState()
{
lock (_lock)
{
if (state == 5)
{
state++;
Console.WriteLine("state: " + state + " 线程ID:" + Thread.CurrentThread.ManageThreadId);
}
state = 5;
}
}
}