存储每个线程的数据

时间:2013-04-10 07:30:03

标签: c# .net multithreading task-parallel-library task

博览会

我需要对大数据缓冲区进行一些处理。 我可以用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必须仅对每个正在执行的线程都是唯一的,显然可以为同一个线程执行的每个计算回收。 实现这一目标的最简单,最有效的方法是什么?

2 个答案:

答案 0 :(得分:2)

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

另见MSDN

答案 1 :(得分:0)

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

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