刚刚遇到一个程序,其中 += 用于线程之间的共享变量,那么 += 线程安全吗,即原子地执行加法和赋值?
			
			1162 次
		
4 回答
            10        
        
		
不,它不是线程安全的,因为它相当于:
int temp = orig + value;
orig = temp;
您可以Interlocked.Add改用:
Interlocked.Add(ref orig, value);
于 2013-10-11T20:50:37.513   回答
    
    
            2        
        
		
你要
System.Threading.Interlocked.Add()
于 2013-10-11T20:50:38.607   回答
    
    
            1        
        
		
string s += "foo";
是
string s = s + "foo";
s被读取然后重新分配。如果在这两个动作之间的值s被另一个线程更改,结果会不同,所以它不是线程安全的。
于 2013-10-11T20:51:20.893   回答
    
    
            0        
        
		
谢谢大家的快速回复。是的,+= 不是线程安全的,为了验证这一点,可以运行以下简单程序。
int count = 0;
        Parallel.For(0, 10000, i =>
        {
            count +=1; // not thread safe
        });
        Console.WriteLine(count);
于 2013-10-12T04:22:32.283   回答