pthreads中运行线程的顺序

时间:2013-06-18 05:20:21

标签: pthreads pthread-join

在以下程序中,线程排序的可能性有哪些?假设“function”将打印唯一的线程id(因为这里我们只有一个进程)。我总是收到订单th1,th2!

#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
int main()
{
            pthread_t th1;
            pthread_t th2;
            pthread_create(&th1, NULL, function, NULL);
            pthread_create(&th2, NULL, function, NULL);
            pthread_join(th1, NULL);
            pthread_join(th2, NULL);
}

   return 0;
}

4 个答案:

答案 0 :(得分:2)

我认为不会有任何特定的排序。现代机器上的线程是并行执行的,并且不确定哪个线程的print语句将首先被执行!

可以假设的唯一排序约束是线程2将在线程1之前,因为第二个pthread_join

答案 1 :(得分:2)

这里唯一的排序保证是pthread_join(th1, NULL);在线程1退出之前不会返回,并且pthread_join(th2, NULL);在线程2退出之前不会返回。因此,在线程1和线程2都退出之前,main()函数不会返回(并且进程不会退出)。

线程1和线程2之间没有排序 - 它们的执行可以任意交错。

答案 2 :(得分:2)

开始告诉操作系统“开始这样做”。连接说“等到这个完成”。

现在你告诉操作系统“做这个”并“做到这一点”。操作系统可以选择任何订单。但大部分时间它会按照你告诉它的顺序进行。

就像在地铁上订购两个sammies一样。 99%的时间你会按照你要求的顺序制作它们。但是每一个蓝月亮,你都不会。但在付款之前,你还在等待他们两个:)

答案 3 :(得分:1)

它就像一个工厂。有两个工人。一个人需要一点咖啡,因此开始一会儿和另一个人完成同样的任务(水壶需要时间)。然后那个工人在所有气瓶上开火,但咖啡生效了。需要使用厕所。所以早先开始的那个先完成但是花了更多时间工作。如果只有那个工人有一个桶?!