免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
1 [报告]
发表于 2008-01-16 17:32 |显示全部楼层
你是不是在线程create之后注册的函数

论坛徽章:
0
2 [报告]
发表于 2008-01-16 22:50 |显示全部楼层
记错了,signal注册没有关系,改变的都是进程的东西
sigprogmask是在pthread_create之前还是之后就有关系了它改变的是线程的数据



当用kill(getpid(),SIGTERM)的时候,或者SIGTERM来自别的进程的时候,通常首选的是线程组里面的初始线程,但是如果这个时候信号正在那个线程上执行的时候,那么信号会选择别的线程执行(可以在信号函数里sleep一下,然后给它们发信号试试)

signal和多线程结合很复杂,信号应该被看着进程的东西,不依赖被哪个线程执行,如果某个线程不想处理信号,那么应该显示的sigprogmask。

[ 本帖最后由 flw2 于 2008-1-16 23:14 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2008-01-18 11:11 |显示全部楼层
这样的话信号应该被阻塞了呀,SIGTERM根本收不到吧

论坛徽章:
0
4 [报告]
发表于 2008-01-18 11:39 |显示全部楼层
请先告诉我,你的结论只有第一个线程thread1能收到信号怎么来的

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

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

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

论坛徽章:
0
7 [报告]
发表于 2008-01-18 11:58 |显示全部楼层
错了,最多一个收到

论坛徽章:
0
8 [报告]
发表于 2008-01-21 11:28 |显示全部楼层
变量只被加了1次,就说明最多1次,这是公理,不是证明,而是验证
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP