为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C C++
心有法竹 2022-07-14 16:11:42
phtread_detach(id); //1pthread_join(id,0);//2注:id为子线程的线程号。
查看完整描述

2 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

有区别。

只用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来销毁终止线程


查看完整回答
反对 回复 2022-07-18
?
皈依舞

TA贡献1851条经验 获得超3个赞

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

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


phtread_detach()

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

子线程中这个用


pthread_detach(pthread_self())

父线程中这么调用


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

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


查看完整回答
反对 回复 2022-07-18
  • 2 回答
  • 0 关注
  • 144 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号