c/c++ linux c 多线程 pthread_detach(id); phthread_join(id,0);

phtread_detach(id);//1pthread_join(id,0);//2以上是多线程技术中的两个函数,我想知道的是1,2两句同时用和只用1,有没有区别?有... phtread_detach(id); //1

pthread_join(id,0);//2

以上是多线程技术中的两个函数,我想知道的是 1,2两句同时用和只用1,有没有区别?

有什么区别? 谢谢!

注:id为子线程的线程号。
展开
 我来答
yy_galois
2013-08-09 · TA获得超过857个赞
知道小有建树答主
回答量:429
采纳率:100%
帮助的人:160万
展开全部

有区别。


只用1可以。同时使用1,2是不可以的。


     一般情况下,线程终止后,其终止状态一直会保留到其他线程调用pthread_join获取它的状态为止。但是线程也可以设置为detach状态,这样的线程一旦终止就立即回收它占用的所有资源,而不保留终止状态。

注意:

  1. 不能对已经detach状态的线程调用pthread_join。

  2. 对一个尚未detach的线程调用phread_join或phread_detach都可以把该线程设置为datach,也就是说,不能对同一线程调用两次pthread_join,或者如果已经对一个线程调用了pthread_detach就不能再调用pthread_join了。

  3. phtread_join是阻塞式的,需要等待这个线程终止,而phread_datach是不阻塞的,所以可以用phread_datach来销毁终止线程

追问
你说的阻塞意思是说:当主线程中调用了子线程,如果子线程启动后主线程会停止下来直到子线程完成后主线程才会运行?
yangZheng006
2013-08-10 · TA获得超过102个赞
知道答主
回答量:151
采纳率:0%
帮助的人:74.8万
展开全部

是这样的,pthread_join()这个函数在多线程开发中主线程主要用来获得子线程结束的状态以便回收子线程的资源。

但是有时候会出现你调用pthread_join()后,子线程还在运作,这样调用者(调用pthread_join的者)可能就会被阻塞,这时候就可以调用

phtread_detach()

子线程非阻塞,可立即返回,这将该子线程的状态设置为detached,则该线程运行结束后会自动释放所有资源。

子线程中这个用

pthread_detach(pthread_self())

父线程中这么调用

pthread_detach(thread_id)//(非阻塞,可立即返回)

他们都是这将该子线程的状态设置为detached,则线程运行结束后会自动释放所有资源。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式