以特定顺序运行八个线程,直到终止

时间:2012-10-20 12:28:08

标签: c++ multithreading

我是一个核心2双核处理器。

我想创建并运行八个线程(它们之间没有共享数据),这样在任何给定时间内,所有八个线程将运行一次,其中线程1和线程2将同时运行,如果线程1和线程2不能由处理器同时运行我希望优先给予线程1,以便线程1将在线程2之前运行。

类似地,线程3和4可以同时运行,但是如果线程3和线程4不能同时运行,我希望线程3在线程4之前执行而不是在线程1和2之前而不是在线程5和6之后执行线程7和线程8.

线程5和线程6,线程7和线程8相同。

在所有8个线程完成任务后,8个线程将以上述给定顺序一次又一次地运行,直到终止。

如何在Windows 7上使用c ++和visual studio 2008实现这一目标?

可以用c ++实现吗?

3 个答案:

答案 0 :(得分:1)

好的,经过大量的争论才能真正解决你的问题,这是我要试着回答的版本:

  

创建线程后,无法保证任何两个线程将在双核处理器上同时运行。因此,如果两个线程不同时运行,我希望优先级为线程1(首先创建)将首先运行,线程2(创建第二个)将始终在线程1之后运行。

幸运的是, 的答案相当简单。您的程序不知道何时运行哪些线程。操作系统没有告诉你它何时启动和停止一个线程,所以你不能编写任何类型的“线程1正在运行?如果没有,我会暂停并让它运行”检查。

但是您可以将线程设置为具有不同的优先级。这向操作系统表明应该安排执行哪些操作。给你的线程一个逐渐降低的优先级(所以线程1具有高优先级,线程2低一级等等),你将做出类似于你想要的东西。在Windows上,这可能实际上运行得相当好,因为Windows总是试图选择可用的最高优先级线程/进程。 Linux将尝试确保所有线程都一些执行时间,但只是将更多提供给更高优先级的

当然,搞乱这样的优先级也会影响你的程序与PC上运行的其他程序的关系。你真的试图以错误的方式解决这个问题,而更合理的解决方案就是简单地找到另一种并行化方案。

答案 1 :(得分:0)

我认为你无法控制线程的执行顺序。创建线程后,由操作系统为您进行调度。您所能做的就是等待线程在父线程中完成。

答案 2 :(得分:0)

什么?您想使用运行线程1,然后使用线程2 ...

不要使用线程。使用while循环并调用:

While(1)
{
   foo1();
   foo2();
   foo3();
   .
   .
   .
}