|
|
|
|
|
|
|
[Original]
[Print]
[Top]
|
碰到一个头疼问题:多线程,反复处理SIGIO,中间有通过RPC进行同步。
实验中,打开系统文件句柄到上限(8192),并且频繁发送SIGIO,最后导致SIGIO收到后,sigio_handler居然没有被调用。注:系统文件句柄打开数恢复正常以后问题也依然存在。
同时发现:该程序的printf居然也不能写东西了。
由于对signal,SIGIO,RPC内部机制不是非常熟悉,请问大家帮我分析一下问题出在哪里,是Kernel问题,还是程序问题。
流程如下。
===============================================================
主线程:
创建子线程Chind;
signal(SIGIO, sigio_handler);//注册
每分钟些文件几次。
信号处理函数:
void sigio_handler(int signo)
{
static pthread_t sigiothread;
pthread_create(&sigiothread, NULL, (void *)sigio_control, NULL);//又起一个线程
pthread_join(sigiothread, NULL);
}
void sigio_control()
{
signal(SIGIO, SIG_IGN);
通过RPC设置一个Windows类似的Event_A
}
子线程Child
{
通过RPC等待Event_A,如果等到了, 做一些RPC动作
}
|
|
|
[Original]
[Print]
[Top]
|
|
|