これは私が自分のコードで行ったこととまったく同じではありませんが、配列参照を交換するシナリオを表しているはずです。配列のタイプがまったく問題になるかどうかはわかりませんが、それでもタイトルで指定しました。
- ループの外でいくつかの DataRow 配列を宣言します。それらにArray1、Array2 ... ArrayXなどの名前を付けます
- 反復変数に応じて、Array1 = Array2 または Array1 = Array3 ... または Array1 = ArrayX
- Array1 で何かをする
コードは次のようになります。
void Somefunction()
{
int indices[];
for (int i = 0; i < threadamount; ++i)
{
indices[i] = i;
}
DataRow[] Array1, Array2, Array3;
//assign something to these arrays
//...
//end of assigning stuff
Parallel.ForEach<int>(indices, index =>
{
if(index == 2)
Array1 = Array2;
else if(index == 3)
Array1 = Array3;
//do stuff with Array1
});
}
では、質問に戻ります。コードは競合状態なしですべての配列で実行されているようです (他のスレッドで Array2 / Array3 を Array1 に正しく割り当てています)。
何故ですか?ループ内に新しい変数を作成する必要があると思いましたが、そうではありません。スレッドごとに Array1 の参照のコピーを実際に作成するためですか? そして、各スレッドの参照 Array1 は実際には異なるオブジェクトですか?
PS: これはここでの最初の質問なので、間違いを犯していないことを願っています :p ここに投稿する前に他の質問をいくつか読みましたが、実際には私の質問に答えていません...