我想問一下關於c#隊列的問題# 如果ConcurrentQueue是安全線程,爲什麼這個代碼的結果是〜98k? 我有什麼問題嗎?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