私の質問は少し理論的です。Parallel.For
をこのように使用した場合、List<object>
がスレッドセーフであるかどうかを知りたいと思います。以下を参照してください:C#並列ループローカル変数スレッドセーフ情報
public static List<uint> AllPrimesParallelAggregated(uint from, uint to)
{
List<uint> result = new List<uint>();
Parallel.For((int)from, (int)to,
() => new List<uint>(), // Local state initializer
(i, pls, local) => // Loop body
{
if (IsPrime((uint)i))
{
local.Add((uint)i);
}
return local;
},
local => // Local to global state combiner
{
lock (result)
{
result.AddRange(local);
}
});
return result;
}
local
はスレッドセーフですか?私が正しいデータをresult
のデータなしで持っているかどうかは、私が通常のループをしているので、複数のスレッドのために変更されていますか?
注:私はリストの順序について心配していません。私はリストとデータの長さについて知りたい。
'List'は並列スレッドセーフではありません、特にあなたの意図です。 –
したがって、私の 'result'リストの意味は、通常のループから取得できるデータと同じではありませんか? – Saadi
これは意味です..... 'List'はスレッドセーフではありません!! –