免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2329 | 回复: 4
打印 上一主题 下一主题

[Linux] 关于semop异常的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-06-24 11:09 |只看该作者 |倒序浏览
10可用积分
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受到了其他信号量的影响,那位大神有遇到这种情况,如何解决。

求职 : 系统工程师等
论坛徽章:
5
技术图书徽章
日期:2014-04-19 22:01:05天蝎座
日期:2014-05-09 13:49:28双子座
日期:2014-06-16 15:08:042015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:28
2 [报告]
发表于 2014-06-24 12:07 |只看该作者
是否有完整代码?

论坛徽章:
0
3 [报告]
发表于 2014-06-24 14:19 |只看该作者
完整代码太多了,没法贴出来回复 2# qxhgd


   

论坛徽章:
0
4 [报告]
发表于 2014-06-27 10:51 |只看该作者
问题解决了,semop返回-1,错误为ENITR.该进程能够捕获到SIGCHLD信号,没有好的解决办法,只是通过错误处理重新调用semop
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP