消息队列满后,写不进,读不出
这两天调程序遇见一个很奇怪的问题,
程序中线程和进程中用到了消息队列,
有的写,有的读,
出现问题的时候是:
通过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 读和写要同一的