我什么时候在GNU C中使用分离的线程?

时间:2014-05-05 15:31:01

标签: c linux pthreads

我正在尝试使用线程库,我遇到了分离的线程属性。所以我需要知道哪里以及为什么要使用Detached线程? 在主进程终止后,与线程分离的线程可以保留在内存中吗?

4 个答案:

答案 0 :(得分:2)

分离的线程是不需要与pthread_join“等待”的线程。线程在返回时会被清理干净。

这对线程的生命周期没有影响:如果任何线程(包括“main”线程)调用_exit,则所有线程都会死亡。

答案 1 :(得分:1)

不,当主线程终止时,即使分离的线程也将被终止。

如果您以后想要加入,请使用分离的主题。 在这种情况下,操作系统可以在不加入线程的情况下清理线程。

请参阅:https://computing.llnl.gov/tutorials/pthreads/

答案 2 :(得分:1)

如果通过调用pthread_exit()结束主线程,线程可以在主线程结束后继续运行。

分离的线程无法连接,并且在终止时释放其资源,而不是在连接时释放其资源的非分离线程。

答案 3 :(得分:0)

进程中所有线程堆栈的空间都是从先前为整个进程堆栈分配的内存中划分出来的(如图所示)。因此,主程序的终止也终止了线程。

enter image description here

举例说明:编写一个程序,创建处于分离状态的线程。使用gdb运行程序,您会发现线程在程序终止时退出。

Starting program: /home/avairavan/CProg/a.out [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". Main Program Starting. [New Thread 0x7ffff77f5700 (LWP 3484)] Main Program Exiting. [Thread 0x7ffff77f5700 (LWP 3484) exited]