资源访问冲突问题

资源访问冲突问题


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;
        }
    }
}
posted @ 2023-10-04 15:52  天空之城00  阅读(15)  评论(0)    收藏  举报