我从
举了一个例子https://www.kernel.org/doc/man-pages/online/pages/man3/pthread_create.3.html
通过创建pthread_create
的线程而不调用pthread_join
,使其无限运行(小睡眠,因此CPU使用不是瓶颈,因此不会排队线程)。这会导致内存泄漏,最终PC内存不足。当我在创建线程程序后立即添加pthread_detach
时,表现很好,并且在一段时间后内存使用率保持不变。
我的印象是,当一个线程退出(在函数的结束}
时,如果给予pthread_create
),它的所有资源都会被清除。
答案 0 :(得分:9)
我的印象是当一个线程退出(在关闭时)函数,如果给pthread_create,它的所有资源都被清除了。
这是一个错误的印象。如您所说,当您调用pthread_join或线程是分离的线程时,所有资源都会为已完成的线程释放。
对于非分离线程,必须保留一些资源 - 否则您无法通过稍后调用pthread_join来获取线程的返回值。分离的线程无法连接,因此您无法从中获取退出值。
许多实现将此返回值存储在线程的堆栈上,从而保留整个堆栈,直到有人在非分离线程上调用pthread_join。