在下面的程序中,线程排序的可能性是什么?假设"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;
}发布于 2013-06-18 13:27:03
这里唯一的排序保证是在线程1退出之前pthread_join(th1, NULL);不会返回,而pthread_join(th2, NULL);在线程2退出之前不会返回。因此,在线程1和线程2都退出之前,main()函数不会返回(进程也不会退出)。
在线程1和线程2之间没有强制的顺序-它们的执行可以任意交错。
发布于 2013-06-18 13:35:42
开始告诉操作系统“开始这样做”。joins会说“等到这件事完成”。
现在你告诉操作系统“做这个”和“做这个”。操作系统可以挑选任何订单。但大多数情况下,它只会按照你告诉它的顺序来做。
就像在地铁里点了两份三明治。99%的时间,你会得到与你要求的相同的顺序。但是每一个蓝月,你都不会。但是你仍然在等待他们两个在你付钱之前:)
发布于 2013-06-18 13:24:36
我认为不会有任何具体的排序。现代机器上的线程是并行执行的,并且不确定哪个线程的print语句将首先执行!
唯一可以假定的排序约束是,由于第二个pthread_join,线程2将排在线程1之前
https://stackoverflow.com/questions/17161062
复制相似问题