3

我只是尝试了这个简单的程序......没什么特别的......

double[] a = new double[100000];
double[] b = new double[100000];

List<double> a1 = new List<double>();
List<double> b1 = new List<double>();

for (Int64 i = 0; i < 100000; i++)
{
    a[i] = i;
    a1.Add(i);
}

Parallel.For(0, 100000, delegate(Int64 i)
{
    b[i] = i;
    b1.Add(i);
});

根据此代码,100000 个数字必须分别存储在 a、b、a1、b1 中。但有时,变量 b1(由并行进程更新的列表)的数字少于 100000(保持在 90000 和 100000 之间变化)。我想知道为什么...

奇怪的内存分配

4

1 回答 1

8

List<T>如MSDN page中所述,多个线程同时写入不是线程安全的。您必须同步访问(违背多线程的目的)或使用线程安全的集合。命名空间中有可用的线程安全集合System.Collections.Concurrent

于 2012-12-29T06:17:10.883 回答