pthread一问

morphis 2004-06-21 04:20:08
用joinable和detached模式创建线程分别有什么区别?

...全文
106 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
blankman 2004-07-02
  • 打赏
  • 举报
回复
转载的,原出处在这里 :)

http://www-900.ibm.com/developerWorks/cn/linux/thread/posix_threadapi/part4/index.shtml
blankman 2004-07-02
  • 打赏
  • 举报
回复
pthread_join()的调用者将挂起并等待th线程终止,retval是pthread_exit()调用者线程(线程ID为th)的返回值,如果thread_return不为NULL,则*thread_return=retval。需要注意的是一个线程仅允许唯一的一个线程使用pthread_join()等待它的终止,并且被等待的线程应该处于可join状态,即非DETACHED状态。

如果进程中的某个线程执行了pthread_detach(th),则th线程将处于DETACHED状态,这使得th线程在结束运行时自行释放所占用的内存资源,同时也无法由pthread_join()同步,pthread_detach()执行之后,对th请求pthread_join()将返回错误。

一个可join的线程所占用的内存仅当有线程对其执行了pthread_join()后才会释放,因此为了避免内存泄漏,所有线程的终止,要么已设为DETACHED,要么就需要使用pthread_join()来回收。
pacman2000 2004-07-02
  • 打赏
  • 举报
回复
继续执行
blackheart99 2004-07-02
  • 打赏
  • 举报
回复
如果主线程(该主线程可以是主进程,也可以是主进程产生的线程)中止了,detached的子线程怎么样?
101monster 2004-07-02
  • 打赏
  • 举报
回复
呵呵,UP!
gaoxianfeng 2004-07-02
  • 打赏
  • 举报
回复
开发当中经常要 detached 线程
CsdnRob 2004-07-02
  • 打赏
  • 举报
回复
同意上面的说法
yl243 2004-06-22
  • 打赏
  • 举报
回复
同意上面的说法
linaxing 2004-06-21
  • 打赏
  • 举报
回复
线程的分离状态决定一个线程以什么样的方式来终止自己。joinable为非分离状态,这种情况下,原有的线程等待创建的线程结束。只有当pthread_join()函数返回时,创建的线程才算终止,才能释放自己占用的系统资源。而detached线程不是这样子的,它没有被其他的线程所等待,自己运行结束了,线程也就终止了,马上释放系统资源。

23,124

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧