【发布时间】:2014-12-22 19:04:51
【问题描述】:
我有这段代码,并且有一个名为 STARTWORK(int THREADNR) 的函数,它不能被 2 个线程调用。基本上我的程序的所有工作都包含在这个函数中,在 WORKVOID1() 和 WORKVOID2() 中,我使用单独的 for() 函数来遍历数据,而 for() 函数被分成两半,这样 2函数覆盖了一半的数据,速度更快,并且在多核处理器上工作。问题是,如果只有主线程,它就像一个魅力,但如果我尝试将 STARTWORK() 分成两部分WORKVOID1() 和 WORKVOID2() 在多个线程中都不起作用,所以请帮我解决它。
public void OPTIMIZATION_ITERATION()
{
Thread WORK = new Thread(WORKVOID);
WORK.Name = "T1";
WORK.Start();
Thread WORK2 = new Thread(WORKVOID2);
WORK2.Name = "T2";
WORK2.Start();
}
public void WORKVOID()
{
for (ALPHA = 0.001; ALPHA <= 0.5; ALPHA += 0.001)
STARTWORK(1);
}
public void WORKVOID2()
{
for (ALPHA = 0.5; ALPHA <= 1; ALPHA += 0.001)
STARTWORK(2);
}
public void STARTWORK(int THREAD)
{
//.......bunch of calculations then it writes it to file
System.IO.StreamWriter WRITE = new System.IO.StreamWriter("OUTPUT_T"+THREAD+".txt", true);
WRITE.BaseStream.Seek(0, SeekOrigin.End);
WRITE.WriteLine(/*..calculations are written to file..*/);
WRITE.Close();
WRITE.Dispose();
}
STARTWORK(int THREADNR) 包含一个参数,该参数将分配一个将数据写入文件的数字,以便 2 具有不同的文件名,而 ALPHA 是一个全局双变量。
【问题讨论】:
-
您知道 TPL
Paralell.For吗?我不确定您要实现什么目标,有什么问题等。另外,您的 请快帮我! 并不能真正帮助您。 -
不,我不是,你能解释一下如何使用它吗?
-
我已经向@Blaatz0r 请求添加了更多代码,希望现在更清楚,如果您希望对新代码分享任何评论,我将不胜感激。
-
基于上次编辑,请参阅this 关于
StreamWriter和多线程的答案。
标签: c# multithreading function error-handling functional-programming