当前位置: 技术问答>linux和unix
epoll_wait时产生的"Interrupted system call"
来源: 互联网 发布时间:2017-01-12
本文导语: 问题描述如下: 一个Linux进程中有三个线程,分别为A,B,C。 A线程中有epoll的使用,来监听来自其他进程的socket连接。 B线程负责处理来自A线程的连接处理。 C线程是一个定时器Timer线程,这个线程利用signal进行计...
问题描述如下:
一个Linux进程中有三个线程,分别为A,B,C。
A线程中有epoll的使用,来监听来自其他进程的socket连接。
B线程负责处理来自A线程的连接处理。
C线程是一个定时器Timer线程,这个线程利用signal进行计数,signal使用的具体代码是:
当运行进程后,先执行B,C线程,然后再执行A线程。A线程运行中,在运行到epoll_wait函数调用时产生了“Interrupted system call”错误。
测试发现:
1. 如果禁掉C线程(定时器Timer线程),一切就会运行正常。
2. 如果A线程不用epoll机制,选用select机制,也会产生“Interrupted system call"错误。
请问,在保证三个线程都使用的情况下,如何解决这个问题。谢谢。
我的思路:是否在timer线程中不使用signal机制,或者在A线程中(使用epoll或者select)做些处理避免这个错误。
一个Linux进程中有三个线程,分别为A,B,C。
A线程中有epoll的使用,来监听来自其他进程的socket连接。
B线程负责处理来自A线程的连接处理。
C线程是一个定时器Timer线程,这个线程利用signal进行计数,signal使用的具体代码是:
signal(SIGALRM,timer_handle);
当运行进程后,先执行B,C线程,然后再执行A线程。A线程运行中,在运行到epoll_wait函数调用时产生了“Interrupted system call”错误。
测试发现:
1. 如果禁掉C线程(定时器Timer线程),一切就会运行正常。
2. 如果A线程不用epoll机制,选用select机制,也会产生“Interrupted system call"错误。
请问,在保证三个线程都使用的情况下,如何解决这个问题。谢谢。
我的思路:是否在timer线程中不使用signal机制,或者在A线程中(使用epoll或者select)做些处理避免这个错误。
|
这个我真不清楚,没读过源码。。 我去围观一下得了。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。