请问:pthread_detach()和pthread_join()的具体含义是什么?

中文QNX 讨论: 欢迎大家灌水,讨论有关QNX 问题。
回复
feifei
Senior Member
帖子: 74
注册时间: 周一 5月 23, 2005 9:09 pm
联系:

请问:pthread_detach()和pthread_join()的具体含义是什么?

帖子 feifei » 周四 11月 24, 2005 11:26 am

看帮助还是不太明白,能不能举个例子呢?谢谢!

xtang
Moderator
帖子: 1815
注册时间: 周五 9月 12, 2003 4:14 am
来自: China

帖子 xtang » 周六 11月 26, 2005 12:00 pm

pthread_join()是用来判断所要求的线程有没有退出。通常和pthread_cancle()共用。

pthread_cancle(tid,...);
pthread_join(tid, ...);

用来确保(同步)“tid”完全退出。

pthread_detach() 过的线程就没办法pthread_join()了。

harrygood5531
New Member
帖子: 8
注册时间: 周五 3月 30, 2012 11:13 am

Re:

帖子 harrygood5531 » 周六 4月 21, 2012 1:22 pm

xtang 写了:pthread_join()是用来判断所要求的线程有没有退出。通常和pthread_cancle()共用。

pthread_cancle(tid,...);
pthread_join(tid, ...);

用来确保(同步)“tid”完全退出。

pthread_detach() 过的线程就没办法pthread_join()了。

pthread_cancle和pthread_exit有区别吗?

xtang
Moderator
帖子: 1815
注册时间: 周五 9月 12, 2003 4:14 am
来自: China

Re: Re:

帖子 xtang » 周二 4月 24, 2012 9:23 pm

harrygood5531 写了:
xtang 写了:pthread_join()是用来判断所要求的线程有没有退出。通常和pthread_cancle()共用。

pthread_cancle(tid,...);
pthread_join(tid, ...);

用来确保(同步)“tid”完全退出。

pthread_detach() 过的线程就没办法pthread_join()了。

pthread_cancle和pthread_exit有区别吗?
cancel() 是cancel别的线程(把别人干掉),exit()是自己退出(自杀)。:)

svenzhang
Senior Member
帖子: 10
注册时间: 周五 12月 05, 2014 11:08 am

Re: 请问:pthread_detach()和pthread_join()的具体含义是什么?

帖子 svenzhang » 周四 3月 19, 2015 10:21 am

pthread_detach是设置线程分离状态,在这个状态下,你的主线程不用回首子线程资源,比如你这样
while(1)
{
pthread_create();//线程函数什么事情都可以不做
}
看看能创建都少个线程,基本上运行与会儿,你的进程就崩溃了,但是如果设置了pthread_detach属性,意思就是说子线程的运行状态不用主线程操心,由init进程最后回收资源,在这个情况下
while(1)
{
pthread_detach();
pthread_create();//线程函数什么事情都可以不做(同上)
}
除非你机器出问题,否则你的进程是不会崩溃的。 当然还要说说pthread_join,这个函数就是用来回收线程资源的,但是有个缺点就是需要线程ID并且是阻塞的方式等待线程,如果子线程是一个死循环的话,那你的主线程就不可能往下面的代码跑了,局限性很大。

回复