C#+ =线程安全吗?
刚刚遇到一个程序,其中+ =用于线程之间的共享变量,所以+ =线程安全,即primefaces地执行添加和赋值?
不,它不是线程安全的,因为它相当于:
int temp = orig + value; orig = temp;
您可以使用Interlocked.Add
代替:
Interlocked.Add(ref orig, value);
你要
System.Threading.Interlocked.Add()
string s += "foo";
是
string s = s + "foo";
s
被读取然后重新分配。 如果在这两个动作之间, s
的值被另一个线程改变,结果会有所不同,所以它不是线程安全的。
谢谢大家的快速回复。 是的,+ =不是线程安全的,并且validation这个可以运行以下简单程序。
int count = 0;
Parallel.For(0, 10000, i => { count +=1; // not thread safe }); Console.WriteLine(count);