首页 > 编程语言 > 详细

多线程面试题之如何正确退出线程

时间:2019-01-19 10:32:39      阅读:187      评论:0      收藏:0      [点我收藏+]

应用场景:

上层业务需调用一个短信中心动态库,此短信中心模块单独开了一个线程,用于从队列中取出消息来调用相应的短信通信模组,通过无线网络发送短信内容到用户手机上。

使用中出现了一个问题,如果底层的短信通信模组动态库卸载了,在上层业务中测试发送短信,短信中心模块的线程由于未退出,收到数据后继续发送,由于底层通信模组被卸载了,就会发送失败,且造成上层业务软件崩溃。此问题可归纳为一般场景:

动态库被卸载前,如何正确退出动态库开的线程。

解决思路:

动态库A使用两个事件退出标识,一个是动态库A退出事件标识EventA,一个是线程B退出事件标识EventB。线程B在一个循环中等待动态库A的退出事件,收到了上层业务卸载动态库A调用时,先激活自身退出事件EventA,随后阻塞等待线程B退出事件。线程B收到EventA后清理资源,并激活线程B的EventB,阻塞等待的动态库A收到EventB后就知道线程B退出了,之后开始卸载底层通信模组。

相关的代码片段如下:

 

未完待续..

多线程面试题之如何正确退出线程

原文:https://www.cnblogs.com/japelly/p/10290451.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!