私はキューの中で質問したいと思います。# ConcurrentQueueが安全なスレッドであれば、なぜこのコードの結果は〜98 k? 何か問題がありますか?ConcurrentQueue C#、不正確な結果ですか?
class Program
{
static int sum = 0;
static ConcurrentQueue<int> queue = new ConcurrentQueue<int>();
static void Main()
{
for (int i = 0; i < 100000; i++)
{
queue.Enqueue(1);
}
Task t1 = Task.Run(() => Calculate());
Task t2 = Task.Run(() => Calculate());
Task.WaitAll(t1, t2);
Console.WriteLine($"Sum = {sum}");
Console.ReadKey();
}
static void Calculate()
{
int result;
while (queue.TryDequeue(out result))
{
sum += result;
}
}
}
' sum + = result'はアトミック演算ではなく、両方のスレッドで同時に実行できます。 – Lee