在线程中创建一个socket线程退出前要释放吗

时间:2022-09-27 18:22:53
刚开始使用socket很多不懂,
在线程中创建一个socket线程退出前要释放吗?
比如ls = socket(AF_UNIX, SOCK_STREAM, 0);
线程退出前要close(ls)吗?

5 个解决方案

#1


要释放,线程是不占用资源的,所有线程共用进程的资源。当进程退出时可以不用释放,可以交给操作系统来释放.

#2


资源是一个概念,一个线程一定要管理好自己的资源,不同情况可能情况不同。
关闭socket可以认为是另一个概念,从资源角度讲,是占用了一个socket资源,但还要正确关闭socket,这个也尤其重要,
由于网络都是异步传输,状态很多,不正确的管理关闭socket,往往会导致很多异常的情况。

#3


O(∩_∩)O 谢谢

#4


 可以调用pthread_detach(tid);来实现“父子线程分离”
创建一个线程默认的状态是joinable, 如果一个线程结束运行但没有被join,则它的状态类似于进程中的Zombie Process,即还有一部分资源没有被回收(退出状态码),所以创建线程者应该调用pthread_join来等待线程运行结束,并可得到线程的退出代码,回收其资源(类似于wait,waitpid) 

#5


在子线程中加入代码   pthread_detach(pthread_self())   
或者父线程调用   pthread_detach(thread_id)(非阻塞,可立即返回)   
这将该子线程的状态设置为detached,则该线程运行结束后会自动释放所有资源。[

#1


要释放,线程是不占用资源的,所有线程共用进程的资源。当进程退出时可以不用释放,可以交给操作系统来释放.

#2


资源是一个概念,一个线程一定要管理好自己的资源,不同情况可能情况不同。
关闭socket可以认为是另一个概念,从资源角度讲,是占用了一个socket资源,但还要正确关闭socket,这个也尤其重要,
由于网络都是异步传输,状态很多,不正确的管理关闭socket,往往会导致很多异常的情况。

#3


O(∩_∩)O 谢谢

#4


 可以调用pthread_detach(tid);来实现“父子线程分离”
创建一个线程默认的状态是joinable, 如果一个线程结束运行但没有被join,则它的状态类似于进程中的Zombie Process,即还有一部分资源没有被回收(退出状态码),所以创建线程者应该调用pthread_join来等待线程运行结束,并可得到线程的退出代码,回收其资源(类似于wait,waitpid) 

#5


在子线程中加入代码   pthread_detach(pthread_self())   
或者父线程调用   pthread_detach(thread_id)(非阻塞,可立即返回)   
这将该子线程的状态设置为detached,则该线程运行结束后会自动释放所有资源。[