2012-10-03 264 views
-1

我是新的多线程,并且正在执行“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! 拉胡尔。

+2

线程的主要点是并行运行,这意味着它们之间没有顺序关系。如果你想在*少数地方订购,你通常使用同步来做到这一点。如果你希望进程在一般情况下是连续的(例如,'second'完全不能运行,直到第一个'完成),只需在同一个线程中运行它们即可。 –

回答

2

创建代码后,无法保证执行代码的顺序。
只有在线程2和线程2将在线程1后创建后才能创建线程3.
只有在线程1中执行某些代码之后,才能预测或假定线程2将被产生。如果你想达到这样的东西,你需要提供你的一些Thread synchronization

3

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

0

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

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