简单地分配变量时是否需要使用锁?

Joe*_*oeS 2 c# multithreading

当多线程我知道我需要锁定变量,如果像添加和项目到列表等,或者我会得到一个跨线程异常.但是在分配变量时我是否需要锁定它们?我不介意线程是否获得变量的旧实例 - 我只是不希望它出错.这是我的意思的一个例子:

    public void Run()
    {
        var thread1 = new Thread(new ThreadStart(Test));
        var thread2 = new Thread(new ThreadStart(Test));
        thread1.Start();
        thread2.Start();
    }

    private static int _test;

    private void Test()
    {
        while (true)
        {
            _test += 1;
        }
    }
Run Code Online (Sandbox Code Playgroud)

Jim*_*hel 5

如果你只是分配一个int,那么没有.但在这里,你不只是分配.你正在递增.所以你需要某种同步.

在你想要增加,使用Interlocked.Increment:

Interlocked.Increment(ref _test);
Run Code Online (Sandbox Code Playgroud)