这不完全是我对代码所做的,但它应该代表交换数组引用的场景。我不确定数组的类型是否重要,但我仍然在标题中指定了它。
- 在循环之外声明一些 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 在尝试将其发布在这里之前,我确实阅读了其他一些问题,但他们并没有真正回答我的问题...