C pthread_join()的使用

C pthread_join()的使用,c,linux,multithreading,pthreads,posix,C,Linux,Multithreading,Pthreads,Posix,我想知道,如果我们在没有pthread\u连接的情况下创建pthread\u,会发生什么 谁将“清理”非联接线程的所有内存。如果该线程是在不使用pthread\u join的情况下创建的,那么当主线程完成执行时,在main函数中创建的所有其他线程都将停止,因此将无法完成其中所有语句的执行 查看的文档 它将使主线程挂起,直到生成的线程完成执行。当进程终止时,与该进程关联的所有资源都将不存在。(这当然不包括进程创建的共享资源,如文件系统中的文件、共享内存段等)在此之前,未连接的线程将继续消耗资源,可

我想知道,如果我们在没有pthread\u连接的情况下创建pthread\u,会发生什么


谁将“清理”非联接线程的所有内存。

如果该线程是在不使用pthread\u join的情况下创建的,那么当主线程完成执行时,在main函数中创建的所有其他线程都将停止,因此将无法完成其中所有语句的执行

查看的文档


它将使主线程挂起,直到生成的线程完成执行。

当进程终止时,与该进程关联的所有资源都将不存在。(这当然不包括进程创建的共享资源,如文件系统中的文件、共享内存段等)在此之前,未连接的线程将继续消耗资源,可能会导致将来调用
pthread\u create
甚至
malloc
失败,假设它是一个应用生命周期线程,不需要或不尝试显式终止,那么当进程终止时(在所有非平凡操作系统上),操作系统就会这样做。

为什么这些调用会因为线程尚未终止而失败?因为这些东西占用了资源。例如,一个线程需要几兆字节的地址空间来进行堆栈映射,当地址空间用完时,您无法启动新线程。在应用程序启动时创建线程并从不终止它们是很常见的,例如应用程序生命周期线程和池线程。这种使用不一定需要join(),也不会持续使用任何额外的资源。@MartinJames:这同样适用于其他资源,如内存。在整个进程生命周期中保留资源从根本上讲没有什么坏处,只要所保留的资源量是有限的和不引人注目的;更准确地说,对主线程返回的启动代码中的
\u exit()
的调用将终止整个进程。因此,如果有人在主线程返回之前停止它,其他线程将保持运行,其他线程需要终止进程。它将阻止调用线程,直到目标线程终止。不必是调用join()的主线程,也不必是由main()直接创建的目标线程。请参阅此问题。问题中的原始代码反复调用
pthread\u create()
,而不执行联接
pthread_create()
最终会因内存不足而失败。