免费注册 查看新帖 |

Chinaunix

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

这个问题很难(进程组间通信问题) [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-01-18 11:47 |只看该作者
我如果认为是线程2收到信号,你认为我错在哪?你的线程函数做的事情都是等待信号,然后把变量加一,无法区分是谁呀

论坛徽章:
0
12 [报告]
发表于 2008-01-18 11:54 |只看该作者
如果是线程2接收到信号,它会执行信号处理函数
但是它相应完信号之后,其它两个线程就收不到这个信号了,很奇怪

论坛徽章:
0
13 [报告]
发表于 2008-01-18 11:55 |只看该作者
原帖由 cxchao_cs 于 2008-1-18 11:54 发表
如果是线程2接收到信号,它会执行信号处理函数
但是它相应完信号之后,其它两个线程就收不到这个信号了,很奇怪

莫非你是要发一遍,然后3个线程都收到?

论坛徽章:
0
14 [报告]
发表于 2008-01-18 11:57 |只看该作者
是这样的,因为kill向当前进程发信号,进程中的所有线程都应该能收到的

论坛徽章:
0
15 [报告]
发表于 2008-01-18 11:58 |只看该作者
错了,最多一个收到

论坛徽章:
0
16 [报告]
发表于 2008-01-21 11:02 |只看该作者
还有一个问题,怎样才能证明“最多一个收到”?:wink:

论坛徽章:
0
17 [报告]
发表于 2008-01-21 11:28 |只看该作者
变量只被加了1次,就说明最多1次,这是公理,不是证明,而是验证

论坛徽章:
0
18 [报告]
发表于 2008-01-21 16:57 |只看该作者

回复 #17 flw2 的帖子

是不是因为这个原因啊。
Linux中线程和他的父进程是共用信号的,因此在程序执行到某个地方的时候如果信号到了就会去执行他的处理函数,处理结束后会把该信号的标志位清零。所以一个进程的信号,在信号到来时只能执行一次该信号的处理函数,具体到楼主的程序,我觉得执行的函数应该是最后一个被注册的线程的处理函数,因为会覆盖前面两个线程的设置。
自己理解的不知对不对^_^

论坛徽章:
0
19 [报告]
发表于 2008-01-22 16:57 |只看该作者
首先,我不明白你这句话是啥意思
“处理结束后会把该信号的标志位清零”,这里的标志位是哪个标志位

另外,是第一个线程响应了信号,而不是最后一个

论坛徽章:
0
20 [报告]
发表于 2008-01-22 17:06 |只看该作者

回复 #19 cxchao_cs 的帖子

每一个进程都有一个32位的变量来描述他所拥有的信号,每个信号一位,如果信号到来的话就会置该位为1,进程在某个时刻会检查是否有信号到来,有的话就去执行,然后清零该位,等待信号的再次到来。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP