C# 每个线程存储数据 博览会
我需要对大量数据进行处理。 我可以用C# 每个线程存储数据 博览会,c#,.net,multithreading,task-parallel-library,task,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
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
必须只对每个正在执行的线程是唯一的,并且显然可以为同一线程执行的每个计算循环使用。
实现这一目标最简单、最有效的方法是什么 您可以将
temp
声明为属性,包装在ThreadLocal
中,然后通过value
属性访问其值
另请参见。我在这里使用了第三个参数: 它为执行迭代的每个任务初始化本地数据