0
你好,我是多線程,並試圖將其納入我的程序,以獲得一個特定的計算收斂速度更快。但是,當我創建如下兩個線程使用多線程兩個線程返回不同的輸入值?
Thread firstThread = new Thread(() => { p0 = f(changePoint, result); });
Thread secondThread = new Thread(() => { p1 = f(changePoint + 1, result); });
firstThread.Start();
secondThread.Start();
firstThread.Join();
secondThread.Join();
p0和p1中的值是相同的(p0與p1具有相同的值)。現在,如果我拿走多線程並且像這樣調用它們:
p0 = f(changePoint, result);
p1 = f(changePoint + 1, result);
返回不同的值並且一切正常。
我在想什麼?
碼f的(X,Y)
public double f(double x,double result)
{
double temp = PCAcont.Future2Yrs(x).Last().FirstOrDefault().StatNetWorthToAssets.GetValueOrDefault();
return temp - result;
}
的主要方法
public double SecantMethod(double prec, int stepsCutoff, double changePoint, double result)
{
double p2, p1 = 0, p0 = 0;
int i;
Thread firstThread = new Thread(() => { p0 = f(changePoint, result); });
Thread secondThread = new Thread(() => { p1 = f(changePoint + 1, result); });
firstThread.Start();
secondThread.Start();
firstThread.Join();
secondThread.Join();
//p0 = f(changePoint, result);
//p1 = f(changePoint + 1, result);
p2 = p1 - f(p1, result) * (p1 - p0)/(f(p1, result) - f(p0, result));
for (i = 0; System.Math.Abs(p2 - p1) > prec && i < stepsCutoff; i++)
{
p0 = p1;
p1 = p2;
p2 = p1 - f(p1, result) * (p1 - p0)/(f(p1, result) - f(p0,result));
}
if (i < stepsCutoff)
return p2;
else
{
System.Diagnostics.Debug.WriteLine("{0}.The method did not converge", p2);
return double.NaN;
}
}
你可以顯示'f(x,y)'的代碼嗎?或者至少告訴我們'結果'是什麼類型,以及它是否在'f()'內被修改? – hatchet
在主 – bewilderedprogrammer
中增加了f(x,y)另外,您正在運行的確切代碼是?如果您的實際代碼是每次迭代設置並啓動線程的for循環,則問題可能與您聲明和使用p0&p1的方式有關。 – hatchet