消息队列满后,写不进,读不出

fensnote 2011-12-31 05:50:11
这两天调程序遇见一个很奇怪的问题,
程序中线程和进程中用到了消息队列,
有的写,有的读,
出现问题的时候是:
通过ipcs查看

------ Message Queues --------
key msqid owner perms used-bytes messages
0x01010001 0 root 666 16384 512


这个时候调用msgsend时就会阻塞,因为消息满了,而读的线程或者进程也是阻塞,读不出,
也就是提示没有要读取的类型的消息

还有一点不明白的就是为什么会写满?一直有读的,只要写,就会被读走,
这个也可能是读端读取消息队列后处理的时间过长,写端把它写满了?

后来我把系统重启后,恢复正常,
有没有人遇到过这样的问题,帮忙看一下怎么解决,只要出现这个问题,系统就得重启,这真是麻烦啊。
当初了解到《Unix高级环境编程》中不提倡用消息队列,是不是又bug缺陷啊?
...全文
490 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2012-01-02
  • 打赏
  • 举报
回复
楼主代码都不肯贴, 有什么好交流的.
fensnote 2012-01-02
  • 打赏
  • 举报
回复
msgtyp 肯定是相同的,不是这里的问题
fensnote 2012-01-02
  • 打赏
  • 举报
回复
已解决,是权限问题,
由于代码太长,不是练习的简短代码,故未能
贴出,望原谅!
qq120848369 2012-01-01
  • 打赏
  • 举报
回复
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,
int msgflg);

关注msgtpe.
philip_puma 2012-01-01
  • 打赏
  • 举报
回复
msgtyp 读和写要同一的
quwei197874 2011-12-31
  • 打赏
  • 举报
回复
读写速度不一样造成的

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧