免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5570 | 回复: 5

[C] 一个信号可以中断同一进程多少个线程的系统调用? [复制链接]

论坛徽章:
0
发表于 2013-12-28 18:53 |显示全部楼层
一个进程里有多个线程,我想在其中一个线程里给本进程发送一个信号,目的是中断其中一个线程的select调用,
这样做有问题吗?
我记得以前在哪里好像看到类似这样的说法:多线程的进程里,信号处理函数会在其中一个线程的上下文里执行,这个线程不是固定的一个。

这个说法是正确的吗?

论坛徽章:
1
处女座
日期:2014-09-18 16:18:00
发表于 2013-12-29 23:22 |显示全部楼层
回复 1# 叶叶叶Yeah

这个说法貌似是对的,我记得posix多线程程序设计里说过。
不过按照你的想法,你可以让除了使用select以外的所有线程屏蔽你发出的这个信号,只让select线程接收,那么它就一定是被中断的那个
   

论坛徽章:
1
技术图书徽章
日期:2013-09-17 09:11:51
发表于 2013-12-30 09:31 |显示全部楼层
同意楼上的,
当一个信号被发送到一个多线程的进程(不仅仅只是一个主线程)时,内核会选择该进程中的任意线程来处理该信号,这样做是保证不会出现一个信号被多次执行;当进程中有多个线程设置阻塞后,内核会选择其中一个没有阻塞的线程来进行处理,这里阻塞的线程其实即实现了与这些线程无关,避免被打扰。

论坛徽章:
0
发表于 2013-12-30 15:47 |显示全部楼层
试试用pthread_kill

论坛徽章:
0
发表于 2013-12-31 23:12 |显示全部楼层
yangpinglaji001 发表于 2013-12-30 15:47
试试用pthread_kill


看函数说明,似乎很合适,

论坛徽章:
0
发表于 2013-12-31 23:13 |显示全部楼层
谢谢楼上各位解答!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP