0

在下面的程序中,线程排序的可能性有哪些?假设“函数”将打印唯一的线程 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

4 回答 4

3

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

现在你告诉操作系统“做这个”和“做这个”。操作系统可以选择任何订单。但大多数时候它只会按照你告诉它的顺序来做。

这就像在地铁里点了两个萨米。99% 的情况下,您会按照您要求的顺序制作它们。但每一个蓝月亮,你都不会。但是您在付款之前仍在等待他们两个 :)

于 2013-06-18T05:35:41.973 回答
2

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

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

于 2013-06-18T05:27:02.740 回答
2

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

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

于 2013-06-18T05:24:36.010 回答
1

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

于 2013-06-18T05:33:32.320 回答