【问题标题】:Storing data per thread每个线程存储数据
【发布时间】:2013-04-10 07:30:02
【问题描述】:

博览会

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

【问题讨论】:

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


    【解决方案1】:

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

    另见MSDN

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-25
        • 2017-11-29
        • 2013-04-02
        • 1970-01-01
        相关资源
        最近更新 更多