51代码网ORACLEMYSQLSQL SERVER其它数据库java/jspasp/asp.netC/C++/VC++APP应用其它语言服务器应用
您现在的位置: 51代码网 >> C >> 文章正文

如何安全的结束掉子线程

更新时间:2012-3-29:  来源:51代码网

在主线程中,需要开启一个子线程用于接收网络发来的包。线程中有个循环,循环中有个recv会阻塞这个线程。
现在的情况是,如果需要在主线程中结束子线程,直接用pthread_kill会造成子线程内存泄露。怎样才能安全的结束掉子线程?

最安全的是return
可以在设一个共享变量,主线程中设置值false, 子线程中读这个值,如果false,while循环结束线程自动结束就行了。

子线程置为joinable的状态,然后在一个while( flag )循环中处理逻辑,另一个线程设置flag之后,调用pthread_join就可以了。

设置flag的同时 关闭socket. recv就会返回了.
recv()如果是阻塞的,那么就必须要有相关接口或设置可以停止recv,否则这个线程无法正常return
或者找到非阻塞的recv(),或者自己去实现recv的功能。
recv功能放到一个线程中去,这样结束该recv线程时,创建该线程的那个while(flag)线程就可以正确清理了,既不泄露内存还可以尽快结束掉

赞助商链接
推荐文章
  • 此栏目下没有推荐文章
  • {
    设为首页 | 加入收藏 | 友情链接 | 网站地图 | 联系站长 |