3

我举了一个例子

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

通过在pthread_create不调用pthread_join. 这会导致内存泄漏,最终 PC 内存不足。当我pthread_detach在创建线程后立即添加时,程序表现良好,一段时间后内存使用量保持不变。

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

4

1 回答 1

10

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

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

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

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

于 2012-12-13T17:45:10.113 回答