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