免费注册 查看新帖 |

Chinaunix

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

信号灯---问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-06-14 11:52 |只看该作者 |倒序浏览
现在有两个进程,一个read,一个deal!

read为客户端,deal为服务端!(使用的是udp协议进行的通信)

在启动服务端时,启动一个信号(semget),并将其初始化(一个信号灯,初始值为1)

作用:

     读进程负责在数据库中读取数据,并按照一定的格式发送到deal服务端,进行处理!   read在发送报文之前先获取信号灯资源,若是有可用资源,即信号灯为1,那么将可以获取信号灯的资源并将信号灯的资源减1,然后将报文发送到deal进程进行处理,若获取信号灯失败,则循环获取信号灯!


     写进程:负责将read发送来的数据解析并组装成一定的报文格式,调用webservice接口!完成业务!  deal在监测到有数据发送来时,将信号灯的资源加1,这时,信号灯的值为1!此时,read又可以发送数据!



问题:

    在开始时处理时没有问题的,但是当处理到16221条数据时,那么read进程获取信号灯失败,原因是信号值一直为零,在deal进程端添加日志,发现deal进程在将信号灯资源加1时失败!  请问是何原因会导致这个问题?


                                                       菜鸟在此求助,请各位大侠帮忙解决!

论坛徽章:
0
2 [报告]
发表于 2012-06-14 13:34 |只看该作者
semop操作信号灯失败?
那你就看看失败情况semop返回-1 ,, errno就是错误号
使用perror("semop error");打印下错误原因。man perror
或者strerror(errno); 输出错误看看是什么问题。

论坛徽章:
0
3 [报告]
发表于 2012-06-14 14:47 |只看该作者
Result too large!   请求的信号量修改值超过其极限!

好诡异的问题啊!

论坛徽章:
0
4 [报告]
发表于 2012-06-14 15:23 |只看该作者
E2BIG  The argument nsops is greater than SEMOPM, the maximum number of
              operations allowed per system call.
不懂了,,正在看unix网络编程-卷2 ,,, 还没学到这, 你看看是什么意思 。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP