首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pthreads中线程的运行顺序

pthreads中线程的运行顺序
EN

Stack Overflow用户
提问于 2013-06-18 13:20:21
回答 4查看 2.8K关注 0票数 0

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

代码语言:javascript
复制
#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;
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-06-18 13:27:03

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

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

票数 2
EN

Stack Overflow用户

发布于 2013-06-18 13:35:42

开始告诉操作系统“开始这样做”。joins会说“等到这件事完成”。

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

就像在地铁里点了两份三明治。99%的时间,你会得到与你要求的相同的顺序。但是每一个蓝月,你都不会。但是你仍然在等待他们两个在你付钱之前:)

票数 3
EN

Stack Overflow用户

发布于 2013-06-18 13:24:36

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17161062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档