2013-01-08 45 views
4

因此,我有3个嵌套循环,内部两个做了很少的工作。我想将最外层的循环转换为并行循环。Parallel.For中的变量

我的问题是:

如果我有循环中的变量,这东西被用作临时值保持,并采取了新的值每个循环。并行性开始时,我需要担心这个变量吗?

我的意思是所有的线程会覆盖相同的变量?

for (int i = 0; i < persons.number; i++) //Loop all the people 
    var Dates = persons[i].Appointments.bydate(DateStep); 

我是否需要担心并行循环中的日期变量?

对不起,我的问题格式不好,但这只是我的第二个问题,我到了那里。

+0

不是'Var',它是'var'。 C#是一种区分大小写的语言。 –

回答

8

简而言之:

由于该变量在循环内作用域,将反正重新分配循环的每一次迭代。它不是在不同线程之间共享的值。

您应该担心的唯一变量是那些在循环外的作用域。

+0

感谢您提供有用的快速答案!但我现在有一个新的问题。 这些迭代根据他们的发现填充二维数组单元格。我知道迭代将填充数组的特定单元格,并且它们不会写入其他线程单元格。我是否需要注意并发性并实现锁定机制?像信号量或Mutex?或者我可以离开它,因为我知道没有并发问题? –

+1

如果它确实是'Array'而不是其他集合,并且可以保证没有两个线程会尝试访问同一个单元格,则应该没问题。 – Rotem

3

Dates对于每个循环迭代都是本地的,因此每个线程都会在自己的堆栈上有一个私有副本。没有干扰。

请注意循环外声明的变量。