C#+ =线程安全吗?

Sal*_*ake 8 c# multithreading

刚刚遇到一个程序,其中+ =用于线程之间的共享变量,所以+ =线程安全,即原子地执行添加和赋值?

Lee*_*Lee 8

不,它不是线程安全的,因为它相当于:

int temp = orig + value;
orig = temp;
Run Code Online (Sandbox Code Playgroud)

你可以Interlocked.Add改用:

Interlocked.Add(ref orig, value);
Run Code Online (Sandbox Code Playgroud)