0

博览会

我需要对大量数据进行一些处理。我可以用表格来表示我的计算,result[i] = F(SomeSubsetOf(input))因此并行进行所有这些计算真的很容易。问题是我为一些操作使用了一个小临时缓冲区,我不想为每个计算分配一个,我只想在每个线程的基础上分配它们。

实际问题

我如何将变量定义为仅每个线程唯一。例如:

int Calculate(byte[] buffer, int resultIndex)
{
    byte temp = new byte[8];

    CopyStuff(buffer, resultIndex -4 , temp, 8) // please dont be pendatic about this line

    DoSomeStuff(temp)l

    return GetAverage(temp);
}

现在我打算使用Parallel.For并且temp必须仅对每个执行线程都是唯一的,并且显然可以为同一线程执行的每个计算回收。实现这一目标的最简单和最有效的方法是什么?

4

2 回答 2

2

您可以声明temp为一个属性,包裹在 中ThreadLocal,然后通过该Value属性访问它的值。

另请参阅MSDN

于 2013-04-10T07:34:26.170 回答
0

我在这里使用了第三个参数:http: //msdn.microsoft.com/en-us/library/dd783299.aspx

它为执行迭代的每个任务初始化本地数据。

于 2013-04-13T20:19:30.120 回答