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

NoS*_*tAl 2 c memory-leaks pthreads

我举了一个例子

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

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

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

nos*_*nos 9

我的印象是当一个线程退出(在函数关闭时),如果给予pthread_create,则清除所有资源.

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

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

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