for (APCounter = start; APCounter < Stager.InstructionsMemory.Length; APCounter++)
{
PipelineInitializor();
int i1 = APCounter;
int i = APCounter;
tasks[i] = new BlockingCollection<Func<object>>();
tasks[i].Add(() => Fetch(i1));
tasks[i].Add(() => Decode(i1));
tasks[i].Add(() => ALURes(i1));
tasks[i].Add(() => Memory(i1));
tasks[i].Add(() => WriteB(i1));
InstructionThread[i] = new Thread(() => Worker(i1, tasks[i1]));
InstructionThread[i1].Start();
}
这些线程需要被带有相同类型数据对象的新线程替换,但需要使用新任务数据。
我尝试过使用Abort
方法(不推荐使用),它会导致所有内容停止执行,无论我调用什么函数,都不会再次开始执行。
答案 0 :(得分:1)
我建议您使用Task Parallel Library和Task类,它具有的功能 消除。
“替换”一个线程没有任何意义。您可以启动一个新线程来处理相同的数据;但是,如果你无法让另一个线程自行停止,你就无法可靠地阻止它。
答案 1 :(得分:0)
正如您所说,不建议使用方法abort()。如果它是一个无限循环,那么一个布尔值用于在没有堕胎的情况下停止线程。
bool run = true;
Thread thread = new Thread(method);
thread.start();
private void method()
{
while(run)
{
}
}
要停止线程,只需将布尔值设置为false,通常可以稍后重启(或其他)