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ページで説明されているように、複数のスレッドが同時に書き込みを行う場合、スレッドセーフではありません。アクセスを同期する(複数のスレッドの目的を無効にする)か、スレッドセーフなコレクションを使用する必要があります。System.Collections.Concurrent名前空間で利用可能なスレッドセーフなコレクションがあります。

于 2012-12-29T06:17:10.883 に答える