我有一些计算程序.现在,这个程序是单线程的,我需要增强它来做多线程.一般来说,程序计算,热电路的动态演化(一些配置类型的不同涉及元素(管,泵,活动区及其连接),每个时间步程序计算扩散方程(http:// en .wikipedia.org/wiki/Diffusion_equation))问题是,在每个步骤中,每个涉及的元素都可以单独处理,但是在每个新的时间步骤中,所有元素应该彼此同步.我决定通过每个元素的每个步骤开始一个线程来解决它.
private void SolveElementDynamic(object element)
{
if (element is PJunction)
{
((PJunction)element).SolveDynamic();
}
else
if (element is PElementData)
{
((PElementData)element).SolveDynamic();
}
}
public void SolveDynamic()
{
ParameterizedThreadStart threadStart = new ParameterizedThreadStart(SolveElementDynamic);
for (int i = 0; i < _elementDataCollection.Count; i++)
{
_threadArray.Add(new Thread(threadStart));
}
int j = 0;
foreach (object element in _elementDataCollection)
{
((Thread)_threadArray[j]).Start(element);
j++;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,与每步计算一个元素相比,创建新Thread似乎太昂贵了.我试图在计算开始时只创建一次Thread数组.但不幸的是,似乎Thread对象不能启动多次?
// Thread's array created before
public void SolveDynamic()
{
int j = 0;
foreach (object element in …Run Code Online (Sandbox Code Playgroud)