当前位置: 技术问答>linux和unix
一个有深度的问题(对信号量操作不熟者请勿进)
来源: 互联网 发布时间:2015-04-17
本文导语: 环境是Red Hat Linux release 7.2 (Enigma) Kernel 2.4.7-10 on an i686 程序为多线程程序,当大话务测试时,一段时间后会打印出调用semop出错 errno=ERANGE ,我追踪信号量的值,发现的确是信号量的值已经大于系统规定的最大值SEMVMX=...
环境是Red Hat Linux release 7.2 (Enigma) Kernel 2.4.7-10 on an i686
程序为多线程程序,当大话务测试时,一段时间后会打印出调用semop出错 errno=ERANGE ,我追踪信号量的值,发现的确是信号量的值已经大于系统规定的最大值SEMVMX=32767。表面上看,应该是“释放”操作多过了“占用”操作。
但是在程序中,我检查了代码,“占用”和“释放”都是成对出现的,并且如果不是成对出现,那么就应该会有死锁情况发生。
不知有哪位高手遇到过这种情况?
|
你确定你的程序流程正确吗?或者你的post和wait操作不同步。 我保证不是semaphore的问题,看看你的代码吧
|
请把源代码email 到 dobig@tom.com 。我来调试一下。
|
Is it possible that there is some jump or return statement between some pair of 占用 and 释放.
|
同意gamedragon的说法,建议仔细查查。
|
代码也给我发一份,调一下。Sap1975@bj1860.net
—————————————————————————————————
┏━★━━◆━━★━┓
♂欢|◢CSDN◣|使♂ ▲自由保存帖子,浏览,关注检测
┃迎|◥论坛助手◤|用┃ ▲完善的CSDN客户端工具
┗━☆━━◇━━━☆┛ ▲自动添加签名......
让你更快,更爽,更方便地上CSDN...
http://www.csdn.net/expert/topic/573/573604.xml
http://www.chinaok.net/csdn/csdn.zip
—————————————————————————————————
┏━★━━◆━━★━┓
♂欢|◢CSDN◣|使♂ ▲自由保存帖子,浏览,关注检测
┃迎|◥论坛助手◤|用┃ ▲完善的CSDN客户端工具
┗━☆━━◇━━━☆┛ ▲自动添加签名......
让你更快,更爽,更方便地上CSDN...
http://www.csdn.net/expert/topic/573/573604.xml
http://www.chinaok.net/csdn/csdn.zip
|
你确定你的程序流程正确吗?或者你的post和wait操作不同步。 我保证不是semaphore的问题,看看你的代码吧
|
我碰到过一个类似的问题,一个线程A读队列时,若为空就休眠,另一个线程B写队列时就唤醒前一个线程。开始我给队列空间50000个(循环队列),我以为B不可能将队列写满,因为A也在不断的读,结果,当B写的很快时,由于唤醒操作本身实现的问题(LinuxThread本身问题也很大)导致队列一下子就满了。
你看看可能是不是这个问题!
你看看可能是不是这个问题!
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。