首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

消息队列满后,写不进,读不出,该怎么处理

2012-04-07 
消息队列满后,写不进,读不出这两天调程序遇见一个很奇怪的问题,程序中线程和进程中用到了消息队列,有的写,

消息队列满后,写不进,读不出
这两天调程序遇见一个很奇怪的问题,
程序中线程和进程中用到了消息队列,
有的写,有的读,
出现问题的时候是:
通过ipcs查看

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


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

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

后来我把系统重启后,恢复正常,
有没有人遇到过这样的问题,帮忙看一下怎么解决,只要出现这个问题,系统就得重启,这真是麻烦啊。
当初了解到《Unix高级环境编程》中不提倡用消息队列,是不是又bug缺陷啊?

[解决办法]
读写速度不一样造成的
[解决办法]
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,
int msgflg);

关注msgtpe.
[解决办法]
msgtyp 读和写要同一的

热点排行