繁体   English   中英

C#+ =线程安全吗?

[英]Is C# += thread safe?

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

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

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的值被另一个线程改变,结果会有所不同,所以它不是线程安全的。

谢谢大家的快速回复。 是的,+ =不是线程安全的,并且要验证这个可以运行以下简单程序。

int count = 0;

  Parallel.For(0, 10000, i => { count +=1; // not thread safe }); Console.WriteLine(count); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM