在线程中创建一个socket线程退出前要释放吗?
比如ls = socket(AF_UNIX, SOCK_STREAM, 0);
线程退出前要close(ls)吗?
5 个解决方案
#1
要释放,线程是不占用资源的,所有线程共用进程的资源。当进程退出时可以不用释放,可以交给操作系统来释放.
#2
资源是一个概念,一个线程一定要管理好自己的资源,不同情况可能情况不同。
关闭socket可以认为是另一个概念,从资源角度讲,是占用了一个socket资源,但还要正确关闭socket,这个也尤其重要,
由于网络都是异步传输,状态很多,不正确的管理关闭socket,往往会导致很多异常的情况。
关闭socket可以认为是另一个概念,从资源角度讲,是占用了一个socket资源,但还要正确关闭socket,这个也尤其重要,
由于网络都是异步传输,状态很多,不正确的管理关闭socket,往往会导致很多异常的情况。
#3
O(∩_∩)O
谢谢
#4
可以调用pthread_detach(tid);来实现“父子线程分离”
创建一个线程默认的状态是joinable, 如果一个线程结束运行但没有被join,则它的状态类似于进程中的Zombie Process,即还有一部分资源没有被回收(退出状态码),所以创建线程者应该调用pthread_join来等待线程运行结束,并可得到线程的退出代码,回收其资源(类似于wait,waitpid)
创建一个线程默认的状态是joinable, 如果一个线程结束运行但没有被join,则它的状态类似于进程中的Zombie Process,即还有一部分资源没有被回收(退出状态码),所以创建线程者应该调用pthread_join来等待线程运行结束,并可得到线程的退出代码,回收其资源(类似于wait,waitpid)
#5
在子线程中加入代码 pthread_detach(pthread_self())
或者父线程调用 pthread_detach(thread_id)(非阻塞,可立即返回)
这将该子线程的状态设置为detached,则该线程运行结束后会自动释放所有资源。[
或者父线程调用 pthread_detach(thread_id)(非阻塞,可立即返回)
这将该子线程的状态设置为detached,则该线程运行结束后会自动释放所有资源。[
#1
要释放,线程是不占用资源的,所有线程共用进程的资源。当进程退出时可以不用释放,可以交给操作系统来释放.
#2
资源是一个概念,一个线程一定要管理好自己的资源,不同情况可能情况不同。
关闭socket可以认为是另一个概念,从资源角度讲,是占用了一个socket资源,但还要正确关闭socket,这个也尤其重要,
由于网络都是异步传输,状态很多,不正确的管理关闭socket,往往会导致很多异常的情况。
关闭socket可以认为是另一个概念,从资源角度讲,是占用了一个socket资源,但还要正确关闭socket,这个也尤其重要,
由于网络都是异步传输,状态很多,不正确的管理关闭socket,往往会导致很多异常的情况。
#3
O(∩_∩)O
谢谢
#4
可以调用pthread_detach(tid);来实现“父子线程分离”
创建一个线程默认的状态是joinable, 如果一个线程结束运行但没有被join,则它的状态类似于进程中的Zombie Process,即还有一部分资源没有被回收(退出状态码),所以创建线程者应该调用pthread_join来等待线程运行结束,并可得到线程的退出代码,回收其资源(类似于wait,waitpid)
创建一个线程默认的状态是joinable, 如果一个线程结束运行但没有被join,则它的状态类似于进程中的Zombie Process,即还有一部分资源没有被回收(退出状态码),所以创建线程者应该调用pthread_join来等待线程运行结束,并可得到线程的退出代码,回收其资源(类似于wait,waitpid)
#5
在子线程中加入代码 pthread_detach(pthread_self())
或者父线程调用 pthread_detach(thread_id)(非阻塞,可立即返回)
这将该子线程的状态设置为detached,则该线程运行结束后会自动释放所有资源。[
或者父线程调用 pthread_detach(thread_id)(非阻塞,可立即返回)
这将该子线程的状态设置为detached,则该线程运行结束后会自动释放所有资源。[