Chinaunix
标题:
关于semop异常的问题
[打印本页]
作者:
chenshko
时间:
2014-06-24 11:09
标题:
关于semop异常的问题
int sem_v_wait(int semid)
{
struct sembuf sops = {0, -1, SEM_UNDO};
return (semop(semid, &sops, 1));
}
int sem_wait_zero(int semid)
{
struct sembuf sops = {0, 0, 0};
return semop(semid, &sops, 1);
}
sem_wait_zero这个函数是当semid的value值为0时程序才会向下继续执行,否则睡觉等待。
可是我的程序运行一段时间后,在semid的value值为1的情况下,程序异常执行了,更加怪异的是每次都是value到34时在此挂起睡觉,不知道是什么原因。
然后在通过34次触发调用sem_v_wait函数,当semid的value值重新回到0时, 又回归正常状态,并且就不再出现这种问题。
还有我发现一个情况无论是否正常状态sem_wait_zero的返回值都是1,应该说明semop调用本身没什么问题。
怀疑semop受到了其他信号量的影响,那位大神有遇到这种情况,如何解决。
作者:
qxhgd
时间:
2014-06-24 12:07
是否有完整代码?
作者:
chenshko
时间:
2014-06-24 14:19
完整代码太多了,没法贴出来
回复
2#
qxhgd
作者:
chenshko
时间:
2014-06-27 10:51
问题解决了,semop返回-1,错误为ENITR.该进程能够捕获到SIGCHLD信号,没有好的解决办法,只是通过错误处理重新调用semop
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2