首页 新闻 会员 周边

如何安全的关闭程序

0
悬赏园豆:10 [已解决问题] 解决于 2021-02-18 17:22

如果写好一个多线程的并发应用,各个线程的业务逻辑很可能不一样。如果有线程在死循环内,执行了数据库事务、非事务控制的第三方数据相关程序。

如果在windows中,使用任务管理器结束或者在Linux中使用kill命令(非-9)。如何保证,这些线程正常结束呢?程序以后台模式运行。    

and技术梦的主页 and技术梦 | 初学一级 | 园豆:7
提问于:2020-12-17 20:54
< >
分享
最佳答案
0

如果要正常关闭,需要自己来处理这些线程的同步
windows下可以使用消息处理,linux使用信号signal来处理

大体步骤
1 程序有接收信号的处理程序,如signal 2,接收到这个后比如设置一个旗标 isExit
2 线程中判断这个旗标 isExit ,执行线程结束过程
3 主程序main等待所有的线程结束,有的情况下线程强制退出,但一般不建议

一般是这样处理,才能保证资源的正确释放和处理

收获园豆:10
2012 | 高人七级 |园豆:21230 | 2020-12-18 07:55

谢谢!

and技术梦 | 园豆:7 (初学一级) | 2021-02-18 17:22
其他回答(1)
0

你的意思是线程突然中断,导致线程执行的DML事务在数据库中未能提交,导致数据库资源被占用而出现阻塞吗

小高飞 | 园豆:84 (初学一级) | 2020-12-24 19:03

谢谢你,我已经知道方法了

支持(0) 反对(0) and技术梦 | 园豆:7 (初学一级) | 2021-02-18 17:22

是程序关闭上的问题,已经解决了,谢谢!

支持(0) 反对(0) and技术梦 | 园豆:7 (初学一级) | 2021-02-18 17:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册