为什么在pthread_create之后未分离线程时,未连接的pthread会泄漏资源

时间:2012-12-13 17:39:00

标签: c memory-leaks pthreads

我从

举了一个例子

https://www.kernel.org/doc/man-pages/online/pages/man3/pthread_create.3.html

通过创建pthread_create的线程而不调用pthread_join,使其无限运行(小睡眠,因此CPU使用不是瓶颈,因此不会排队线程)。这会导致内存泄漏,最终PC内存不足。当我在创建线程程序后立即添加pthread_detach时,表现很好,并且在一段时间后内存使用率保持不变。

我的印象是,当一个线程退出(在函数的结束}时,如果给予pthread_create),它的所有资源都会被清除。

1 个答案:

答案 0 :(得分:9)

  

我的印象是当一个线程退出(在关闭时)函数,如果给pthread_create,它的所有资源都被清除了。

这是一个错误的印象。如您所说,当您调用pthread_join或线程是分离的线程时,所有资源都会为已完成的线程释放。

对于非分离线程,必须保留一些资源 - 否则您无法通过稍后调用pthread_join来获取线程的返回值。分离的线程无法连接,因此您无法从中获取退出值。

许多实现将此返回值存储在线程的堆栈上,从而保留整个堆栈,直到有人在非分离线程上调用pthread_join。