下面的线程使用正确吗?
FT[] ft = new FT[iota_Delta_tau];
Thread[] t = new Thread[iota_Delta_tau];
for (int i = 0; i < iota_Delta_tau; i++)
{
int copy_i = i;
t[i] = new Thread(() => ThreadNewFt(ref ft[i], copy_i));
t[i].Start();
}
for (int i = 0; i < iota_Delta_tau; i++)
t[i].Join();
我使用copy_i
代替i
,因为它在新线程的lambda表达式中使用。但是我担心ref ft[i]
。我不能发送它的副本,因为它是参考。我担心会发生同样的事情:
MutiThreading - Index was outside the bounds of the array Exception
答案 0 :(得分:0)
仅当您想在每次迭代中提供一个新值时才需要该副本,而我认为ft
并不适用。唯一要纠正的是ref ft[copy_i]
而不是ref ft[i]
。但是,使用TPL会更高效,更简洁:
Parallel.For(0, iota_Delta_tau, i => ThreadNewFt(ref ft[i], i));
而不是上面的所有代码。