繁体   English   中英

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

[英]Why do unjoined pthreads leak resources when thread is not detached after pthread_create

我举了一个例子

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM