免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: wait_rabbit
打印 上一主题 下一主题

[进程管理] 两个无关的内核线程,如何才能及时知道某一方的退出? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2012-12-04 12:31 |只看该作者
回复 9# wait_rabbit


    去复习下kernel的同步机制吧

论坛徽章:
12
寅虎
日期:2013-12-04 20:37:4915-16赛季CBA联赛之广东
日期:2017-08-22 19:23:1215-16赛季CBA联赛之上海
日期:2016-06-18 23:05:05操作系统版块每日发帖之星
日期:2016-06-06 06:20:00操作系统版块每日发帖之星
日期:2016-06-05 06:20:00操作系统版块每日发帖之星
日期:2016-06-03 06:20:002015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之巴勒斯坦
日期:2015-02-10 21:38:08卯兔
日期:2014-10-31 20:42:23申猴
日期:2014-06-11 17:15:10处女座
日期:2014-05-22 09:00:1815-16赛季CBA联赛之广夏
日期:2017-09-25 23:37:46
12 [报告]
发表于 2012-12-05 08:50 |只看该作者
回复 11# George_lz

模型比较特殊,是 A 先命令 B 退出,B 收到指令后,选择主动退出。这样就有一个问题,不论 B 做了什么事,都不能保证 A 收到反馈时,B 确实已经退出了。

   

论坛徽章:
0
13 [报告]
发表于 2012-12-05 10:18 |只看该作者
本帖最后由 zyr-linux 于 2012-12-05 10:19 编辑

设个标记,视情况,全局变量、信号量、锁等等等等,

B进去设置一次,退出设置一次,
A在B退出之后,才能进行的操作中检查该标记。


B对A同理。

论坛徽章:
12
寅虎
日期:2013-12-04 20:37:4915-16赛季CBA联赛之广东
日期:2017-08-22 19:23:1215-16赛季CBA联赛之上海
日期:2016-06-18 23:05:05操作系统版块每日发帖之星
日期:2016-06-06 06:20:00操作系统版块每日发帖之星
日期:2016-06-05 06:20:00操作系统版块每日发帖之星
日期:2016-06-03 06:20:002015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之巴勒斯坦
日期:2015-02-10 21:38:08卯兔
日期:2014-10-31 20:42:23申猴
日期:2014-06-11 17:15:10处女座
日期:2014-05-22 09:00:1815-16赛季CBA联赛之广夏
日期:2017-09-25 23:37:46
14 [报告]
发表于 2012-12-05 12:32 |只看该作者
回复 13# zyr-linux

我就是认为这样是不安全的。

B 设置 标志 之后,“立刻”退出。

在这个“立刻”之间, A 就可以检查到这个标志,从而往下运行了,但实际上 B 还没有真正退出。
   

论坛徽章:
0
15 [报告]
发表于 2012-12-05 15:38 |只看该作者
我突然发现如果仅仅纠结于用mutex、 condition 等这几个用于线程互斥、同步的方法上,或许思维一直打不开了,进程间的通信方式有好几种:socket、管道、信号、共享内存等,这些我觉得好像都可以用来解决楼主的问题,不过有些用起来就比较有些复杂了,不过可以尝试使用以下管道。
比如可以使用一对管道Pipe_1, writePipe_2,A线程向pipe_1的写段写数据,B线程从pipe_1的读端读数据,当然在B线程中你得实时监控pipe_1的读端是否有数据可读,通信的数据就可以用来判断线程A发生了什么,启动了就写入start,停止了就写如stop。同理,如果A线程要知道B线程发生了什么,那么B线程就像管道的写端写入相应的数据,A线程监控管道的读端并读出数据就能知道B线程是开始还是结束了。

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
16 [报告]
发表于 2012-12-05 15:59 |只看该作者
回复 14# wait_rabbit
这个要想gracefully的实现,的确有些困难。

   

论坛徽章:
0
17 [报告]
发表于 2012-12-06 10:14 |只看该作者
wait_rabbit 发表于 2012-12-05 12:32
回复 13# zyr-linux

我就是认为这样是不安全的。


莫非A的运行还和B的thread资源有关?

论坛徽章:
12
寅虎
日期:2013-12-04 20:37:4915-16赛季CBA联赛之广东
日期:2017-08-22 19:23:1215-16赛季CBA联赛之上海
日期:2016-06-18 23:05:05操作系统版块每日发帖之星
日期:2016-06-06 06:20:00操作系统版块每日发帖之星
日期:2016-06-05 06:20:00操作系统版块每日发帖之星
日期:2016-06-03 06:20:002015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之巴勒斯坦
日期:2015-02-10 21:38:08卯兔
日期:2014-10-31 20:42:23申猴
日期:2014-06-11 17:15:10处女座
日期:2014-05-22 09:00:1815-16赛季CBA联赛之广夏
日期:2017-09-25 23:37:46
18 [报告]
发表于 2012-12-06 12:24 |只看该作者
回复 17# zyr-linux

yes  




   

论坛徽章:
0
19 [报告]
发表于 2012-12-06 14:22 |只看该作者
看到这个问题,我第一个想到的就是 completion.

不过好像之前有人说 completion 不行. 我知道内核中 urb 的提交, bio 的控制很多都是用的 completion. 不知道为什么 completion 不行.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP