8

スレッド間の共有変数で += が使用されているプログラムに遭遇しましたが、+= はスレッドセーフですか? つまり、加算と代入をアトミックに実行しますか?

4

4 に答える 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 に答える
0

迅速な回答ありがとうございます。はい、+= はスレッド セーフではありません。これを確認するには、次の簡単なプログラムを実行します。

int count = 0;

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

于 2013-10-12T04:22:32.283 に答える