2014-02-15 108 views
2

在手册页pthread_detach我读到,当任何线程分离时,然后在线程终止时,它释放其资源回到系统。当线程释放其资源

什么是线程资源?它是否是该线程所使用的内存的一部分,如果是这样的话,则内存是进程地址空间的一部分。我试图理解这一点,但我知道了。

那么可联接线程呢,线程什么时候释放它的资源呢?在pthread_join时,或在终止或过程的时间?

当在pthread_cancel命令中释放资源时。

回答

2

每个线程都会在操作系统中消耗一定数量的簿记资源,并在用户空间内存中占用其自己的执行堆栈。当线程被销毁这些资源被释放,可几个条件,比如下发生:在可连接的线程调用时

  • pthread_join回报,
  • 分离线程的入口函数返回,
  • main回报正常或exit被调用,
  • 由于接收未处理的信号,终止进程
  • exec被成功调用。

但是,退出正在运行main的线程并保持其他正在运行的分离线程是可能的。为此,您必须在主线程中调用pthread_exit

+0

那么'pthread_cancel'和一个线程返回并且没有被主线程加入呢? –

+1

@Abhiteshkhatri:取消对讨论无关紧要。您仍然需要加入该线程,特别是如果您想知道取消是否有效。有关详细信息,请参见[手册](http://man7.org/linux/man-pages/man3/pthread_cancel.3.html)。 –