以特定顺序运行八个线程,直到终止
Running eight threads in a particular order until termination
我有一个Core 2 Duo处理器。
我想创建并运行八个线程(它们之间没有共享数据),以至于在任何给定时间中,所有八个线程都将运行一次,而线程1和线程2将同时运行,如果线程1和线程1和线程2不能由我希望优先级的处理器同时运行到线程1,以便线程1将在线程2之前运行。
类似地,线程3和4可以同时运行,但是如果线程3和线程4不能同时运行,我希望线程3在螺纹4之前执行,而不是在线程1和2之前执行,而不是在线程5和6和6线程7和线程8.
对于线程5和线程6,线程7和线程8的相同。
所有8个线程都完成了任务后,8个线程将在上述顺序中一次又一次运行,直到终止。
如何使用Windows 7上的C 和Visual Studio 2008实现此目标?
是否可以使用C ?
好吧,在很多争吵中真正从您那里提出问题之后,这是我要回答的版本:
创建线程后,不能保证任何两个线程将同时在双核处理器上运行。因此,如果两个线程不同时运行,我希望优先级,以使线程1(创建的第一)将首先运行,而线程2(创建第二个)将始终在线程1之后运行。
>
幸运的是,的答案相当简单。您的程序不知道在运行哪些线程时。操作系统何时启动并停止线程,因此您无法编码任何形式的"线程1运行? ,但是您可以将线程设置为具有不同的优先级。这表明OS应该安排哪些执行。给您的线程逐渐减少优先级(因此,线程1具有很高的优先级,螺纹较低2较低一步,依此类推),您将做一些可以近似所需的东西的东西。在Windows上,这实际上可能会很好地奏效,因为Windows总是试图选择可用的最高优先级线程/过程。Linux将尝试确保所有线程都能获得一些
当然,处理此类优先级也会影响您的程序与PC上运行的其他所有内容有关的计划。您确实想以错误的方式解决这个问题,而卫生解决方案就是简单地找到另一种并行化的方案。
我认为您不能控制线程的执行顺序。创建线程后,将为您完成计划。您所能做的就是等待线程在您的父线程中完成。
什么?您要使用Run线程1,然后使用线程2 ...
不要使用线程。使用一段循环并致电:
While(1)
{
foo1();
foo2();
foo3();
.
.
.
}
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 用于矢量处理的多个线程
- 如何在多个线程中创建 QSql数据库连接时防止名称冲突
- 如何声明由多个线程调用的 C++ DLL 的内部类,而无需导出类
- 在两个线程上读/写 64 位,无互斥/锁定/原子
- 自 Windows 10 20H1 以来,具有单独线程的多个窗口停止工作
- ASIO signal_set多个 IO 线程不可靠,具体取决于代码顺序?
- 将 10 个线程与原子布尔值同步
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- C++线程安全:如果只有一个线程可以写入非原子变量,但多个线程从中读取. 会遇到问题吗?
- C++:在多个线程中访问同一数组/向量的不同单元格是否会产生数据竞赛?
- 一个线程等待多个线程事件
- 如果在 2 个线程中使用,是否值得将size_t声明为 std::atomic?
- 餐饮哲学家问题 - 只有 2 个线程工作
- 如果两个线程相互依赖,则 cpp 线程连接应使用连接导致死锁
- Qt 线程两个参数
- 以特定顺序运行八个线程,直到终止
- 我们是否需要每个线程多个io_service用于具有单个接受器的线程 boost::asio 服务器
- C++11线程:多个线程正在等待一个条件变量
- 多线程两个功能使用openMP