我想问一下关于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