我正在尝试使用c#中的ThreadPool
多线程化我的应用程序。我有一个3D数组,我必须分别处理每一行。我已经产生了与系统中处理器(核心)数量相等的线程,然后在线程之间划分任务以处理各个行。
为我使用该线程在不同线程之间划分数据的所有线程调用单个函数。 (SIMD的东西)。该函数也调用其他小函数。此外,这些函数还创建动态分配的数组作为中间值的临时存储空间。我想知道线程中局部变量的概念是什么。在多个线程中调用单个函数是否在各个线程中创建变量的本地副本?我该如何设计这样的代码?
请解释..
答案 0 :(得分:1)
在多个线程中调用单个函数是否会在各个线程中生成变量的本地副本?
嗯,并不是它制作变量的本地副本。每个局部变量/线程对都是特定的存储位置,并且该存储位置对于任何其他局部变量/线程对都不相同。
我已经在系统中产生了与处理器(核心)相等的线程,然后在线程之间划分任务以处理各个行。
你为什么这样做?使用TPL。
答案 1 :(得分:0)
我认为您应该重新考虑解决方案,并尝试使用Parallel.For作为您的解决方案。
但是要回答你的问题,你可以在多个线程中使用单个函数,如果它被设计为线程安全的话。您可以在函数中使用局部变量,因为它们是函数的本地变量,并且每个调用都将获得一个单独的内存位置。