代码改变世界

linux线程退出时系统资源释放

2011-06-12 19:37  后端技术  阅读(1729)  评论(0编辑  收藏  举报

      线程创建时,系统会分配给线程一些资源,我们可以看到的就是线程描述符,线程堆栈,在系统内部还会有更复杂的系统维护一些信息,这篇的目的不是为了深入探测内核为线程维护了多少资源,我们要了解的是在线程创建时,内核总会为其维护一些资源,比较理想的情况是线程运行结束后,这些资源可以释放,以备后来者的使用。

     本文要说一下使线程执行结束后释放资源的三种方法,利用这些方法,我们可以避免线程退出时,资源仍然无法释放的情况:

  1. pthread_join,这个函数的原型是pthread_join(pthread_t thread, void **value_ptr),作用是使调用函数的线程阻塞等待指定线程退出。只有线程是可接入的时候,调用pthread_join才会成功。
  2. pthread_detach,这个函数可以改变线程的可接入属性,将其改变成分离模式。当线程处于分离模式,表明我们对于线程的返回值并不关心,工作线程执行完毕后会自行退出,内核会释放该线程占用的资源。
  3. 设置线程属性结构pthread_attr_t为可分离的,如pthread_attr_init(&attr);pthread_attr_setdetach(&attr,PTHREAD_CREATE_DETACHED),并用此线程属性对象参与pthread_create函数中,这样创建出的线程都是分离的。

     说一个多线程应用的场景,主线程负责加载配置文件,资源初始化,完成这些之后,便产生固定数目的工作线程,让这些工作线程真正做事。这时候主线程需要等待工作线程退出,在这种情况下利用pthread_join更合适,因为pthread_detach后,我还没有发现有比较好的通知主线程关于工作线程的退出情况的方法。

     在后面的随笔中需要学习一下线程创建时,系统到底为它分配了哪些资源。