并行处理期间的值存储

San*_*kar 3 c# parallel-processing task-parallel-library

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

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);
});
Run Code Online (Sandbox Code Playgroud)

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

奇怪的记忆分配

Mik*_*ray 8

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