社区
C语言
帖子详情
多线程信号问题的请教
Caballeroo
2009-07-24 01:27:09
要是在一个拥有多个线程的进程(线程1,2,3)中,其中线程2,3中分别读串口和网口的数据并进行处理,
要是把两个设备都设置成信号异步驱动的形式,即当网口和串口有数据达到时,调用信号处理函数进行相应工作。
这样有一个问题:因为线程2.3中都不能屏蔽信号SIGIO,那样的话要是串口有数据到达,有可能执行的是网口的信号处理函
数,,,,而网口有数据到达时执行了串口的信号处理函数,,,,
这个问题怎么解决?
...全文
130
9
打赏
收藏
多线程信号问题的请教
要是在一个拥有多个线程的进程(线程1,2,3)中,其中线程2,3中分别读串口和网口的数据并进行处理, 要是把两个设备都设置成信号异步驱动的形式,即当网口和串口有数据达到时,调用信号处理函数进行相应工作。 这样有一个问题:因为线程2.3中都不能屏蔽信号SIGIO,那样的话要是串口有数据到达,有可能执行的是网口的信号处理函 数,,,,而网口有数据到达时执行了串口的信号处理函数,,,, 这个问题怎么解决?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Wolf0403
2009-07-25
打赏
举报
回复
信号驱动 I/O 本来就不适合有多个句柄需要读写的情况吧?
如果两个都是标准文件句柄,可以用 open write read 这些的,看看能不能改用 select / epoll 模型?
晨星
2009-07-24
打赏
举报
回复
我一般都在这儿看:
linux.die.net
呵呵。
Caballeroo
2009-07-24
打赏
举报
回复
[Quote=引用 6 楼 steedhorse 的回复:]
引用 4 楼 caballeroo 的回复:
我有个问题请教steedhorse,,,, 关于sigsuspend函数的返回问题:
当两个线程1,2均没有屏蔽某一信号,线程2中调用sigsuspend等待信号处理函数返回。如果原本想让线程2执行信号处理函数,但假设当信号达到时线程1执行了信号处理函数,那样的话信号处理函数执行结束后,,线程2中的sigsuspend函数会返回码?
我觉得不会,就跟其它那些可能被打断并将错误码置为EINTR的阻塞系统调用(比如sleep,waitpid等等等等)一样,哪个线程被信号打断了,哪个线程中的阻塞操作就会提前返回。
但我并不确定,因为LINUX的API文档中,对于sigsuspend在多个pthread情况下的表现只字未提。
[/Quote]
我也觉得不会,其实我也不太肯定
昨天的做了一个实验就是线程2一直没有返回,但不知道实验是否正确
Linux API 文档是指的那个?能不能给个链接
晨星
2009-07-24
打赏
举报
回复
[Quote=引用 4 楼 caballeroo 的回复:]
我有个问题请教steedhorse,,,, 关于sigsuspend函数的返回问题:
当两个线程1,2均没有屏蔽某一信号,线程2中调用sigsuspend等待信号处理函数返回。如果原本想让线程2执行信号处理函数,但假设当信号达到时线程1执行了信号处理函数,那样的话信号处理函数执行结束后,,线程2中的sigsuspend函数会返回码?
[/Quote]
我觉得不会,就跟其它那些可能被打断并将错误码置为EINTR的阻塞系统调用(比如sleep,waitpid等等等等)一样,哪个线程被信号打断了,哪个线程中的阻塞操作就会提前返回。
但我并不确定,因为LINUX的API文档中,对于sigsuspend在多个pthread情况下的表现只字未提。
yylklshmyt20090217
2009-07-24
打赏
举报
回复
线程2,3中分别读串口和网口的数据并进行处理,
2,3线程可以不可以换成在 主程序中实行多路转接,转接之后再创建线程去读取数据并进行处理
这样 就避免了信号的问题
Caballeroo
2009-07-24
打赏
举报
回复
我有个问题请教steedhorse,,,, 关于sigsuspend函数的返回问题:
当两个线程1,2均没有屏蔽某一信号,线程2中调用sigsuspend等待信号处理函数返回。如果原本想让线程2执行信号处理函数,但假设当信号达到时线程1执行了信号处理函数,那样的话信号处理函数执行结束后,,线程2中的sigsuspend函数会返回码?
晨星
2009-07-24
打赏
举报
回复
我只是举个例子。
其实我啥也没说,呵呵,这个问题我是想不到直接的解决办法的,于是只好想办法绕开了。
我是想让三个线程合作,一个线程负责监听信号,另外两个线程处理数据。处理数据的线程屏蔽掉SIGIO
一旦有信号到来,监听信号的线程就把信号信息暂存到一个队列中,然后能过某种方式通知处理处据的线程。
Caballeroo
2009-07-24
打赏
举报
回复
steedhorse大哥,能不能详细说明一下,小弟感激不尽!
晨星
2009-07-24
打赏
举报
回复
同一种信号最好只让一个线程处理。
但“处理”不一定是全部处理到底,所谓“处理”只是响应一下就可以了。比如让信号排一下队,然后再分派给不同的线程继续处理就可以了。
JAVA多
线
程精讲下
线
程的同步(
线
程安全
问题
)l
线
程的死锁l
线
程间通信l
线
程组l
线
程池l 多
线
程的第三种实现方案l 匿名内部类方式使用多
线
程l 定时器的使用l 多
线
程面试题
使用socket多
线
程多客户端传输
信号
将上述代码中服务端有两个
信号
需要传送给上述两个客户端,所以需要客户端传送
信号
给服务端,让服务端知道是哪个
信号
传输给哪个客户端。比如客户端1传输
信号
"1"给服务端,服务端就知道是客户端进行请求,所以传输相应的
信号
给客户端1,同样的,传输客户端2想要的
信号
给客户端2。需要将一个c++可执行文件中的两个
信号
实时传送给两个不同的C++可执行文件。在实际应用中服务端还需要创建一个
线
程,用来生成客户端想要的
信号
。上述代码中gets_angle()函数是获取客户端所需要的信息。来实时获取客户端所需要的信息。
android多
线
程的本质,[原创]分析unidbg(unidbgMutil)多
线
程机制
unidbg多
线
程分析一. 概述由于在工作中遇到了某翻译so中有多
线
程调用,因此使用unidbg分析(基于unidbgMutilThread)并增加阻塞唤醒机制(futex系统调用),但仍未调用成功,因此本文概述对unidbg多
线
程的理解、android多
线
程的创建流程、实现简单的阻塞唤醒、以及近段时间分析的总结,也希望大神网友能提出宝贵意见及分析方向,文末会有相关内容。二. 准备相关源码路径三....
每个
线
程都有自己的
信号
屏蔽字,但是
信号
的处理时进程中所有
线
程共享的http://bbs.csdn.net/topics/350222437
新手小白看《unix环境高级编程》 有点困惑 一个进程不是只有一个
信号
屏蔽字吗?一个进程可以创建多个
线
程,那么多个
线
程共享一个
信号
屏蔽字呀,为什么书上12.8节里说“每个
线
程都有自己的
信号
屏蔽字,但是
信号
的处理时进程中所有
线
程共享的”??? 还有啊,“sigprocmaskde 的行为在多
线
程的进程中并没有定义”,这样说的话,创建了
线
程就会使这个函数失去定义?还是包含
python多
线
程原理qthread_QThread多
线
程的
问题
继续
请教
个
问题
。任务WORK在thread里面运行后,如果想停止任务(而不是简单终止
线
程),用
线
程安全的方式用槽
信号
来触发任务停止条件时,不起作用,因为
线
程内需要等任务(dowork)自然完成后,才会接收其他槽
信号
队列。如果直接用跨
线
程的方式执行实例self.work.stop,反而能够立即停止任务。只是隐约感觉这种方式不太正规,请问有没有其他方式?classWork(QObject):upda...
C语言
69,381
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章