执行线程的顺序

时间:2012-10-03 14:49:09

标签: c++ multithreading unix

我是多线程的新手,并且正在关注“在unix环境中进行高级编程”。我无法获得执行线程的顺序。我有以下代码。

int err1 = pthread_create(&first, NULL, disp, a);
int err2 = pthread_create(&second, NULL, disp, b);
int err3 = pthread_create(&third, NULL, disp, c);

但是与第三个tid相关的线程首先执行,然后是第二个,最后是第一个。不确定这是行为还是出现问题。

THX! 拉胡

3 个答案:

答案 0 :(得分:3)

这不是确定性的。线程并行运行,因此它取决于您拥有多少处理器和超线程。如果您希望按给定顺序使用它们,则需要使用同步点。一旦启动,所有线程都以自己的速率独立运行。

答案 1 :(得分:2)

无法保证在创建代码后执行代码的顺序 只有可以保证的是,在线程2和线程2将在线程1之后创建后,将创建线程3 您无法预测或假设线程2仅在线程1中执行了某些代码后才会生成。如果您希望实现类似的功能,则需要提供一些 Thread synchronization

答案 2 :(得分:0)

您的程序在一个线程中运行,并再创建三个。您可以保证的是,创建其他三个线程的顺序以及它们将在某个阶段执行。操作系统可以停止你的主线程,并在创建它们时按顺序为你完成新线程,它可以将它们粘贴在一些线程堆栈中,以便在主程序完成创建后再查看。关键是,你真的不知道。

如果你需要按顺序执行这三个线程并在下一个线程开始之前完成,你基本上不需要首先使用线程。