在以下程序中,线程排序的可能性有哪些?假设“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;
}
答案 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)
它就像一个工厂。有两个工人。一个人需要一点咖啡,因此开始一会儿和另一个人完成同样的任务(水壶需要时间)。然后那个工人在所有气瓶上开火,但咖啡生效了。需要使用厕所。所以早先开始的那个先完成但是花了更多时间工作。如果只有那个工人有一个桶?!