在子线程退出后,pthread_detach是否释放分配给子线程的堆栈

时间:2011-10-01 10:27:39

标签: pthreads posix

我已经使用pthread_detach来释放分配给子线程的堆栈,但这不起作用,我猜它不会释放内存.....

我不想使用pthread_join。我知道加入让我保证为孩子释放堆栈,但是,我不希望父级挂起,直到子线程终止,我希望我的父母同时做一些其他的工作。所以,我使用了detach,因为它不会阻塞父线程。

请帮帮我。我被卡住了..

2 个答案:

答案 0 :(得分:1)

YES - 根据http://cursuri.cs.pub.ro/~apc/2003/resources/pthreads/uguide/users-16.htm,它会在线程结束时释放内存,或者如果线程已经结束则立即释放内存...

由于你没有提供任何线索,因为你如何确定内存没有被释放,我只能假设你用来确定它的方法是不够的......

答案 1 :(得分:1)

  

这不起作用

是的。您可能会错误地解释您的观察结果。

  

我希望我的父母同时做一些其他的工作

这通常是首先创建线程的原因,而你可以这样做:

pthread_create(...);
do_some_work();     // both current and new threads work in parallel
pthread_join(...);  // wait for both threads to finish
report_results();
  

我不想使用pthread_join。我知道加入让我保证为孩子释放堆栈

以上陈述是错误的:它确保没有这样的事情。一个常见的实现将缓存现在可用的子堆栈以供重用(如果您将很快创建另一个线程)。