码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-01-19 11:16:54      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:线程   动态库   软件   取出   就会   无线网络   无线   nta   消息   

应用场景:

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

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

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

解决思路:

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

相关的代码片段如下:

 

未完待续..

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

标签:线程   动态库   软件   取出   就会   无线网络   无线   nta   消息   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!