当前位置: 首页 > java >正文

System V消息队列报Resource temporarily unavailable 错误

项目场景:

使用System v 消息队列,进行线程间数据通讯。msgsnd()函数作为生产者,msgrcv()函数当作消费者。

问题描述:

当大事件量数据的时候会出现 Resource temporarily unavailable 错误。在常规情况下不会产生此错误。


原因分析:

经过对代码的分析,当有大事件数据触发时会产生消费者,消费者msgrcv()处理的时间较长,速度较慢。生产者msgsnd()在非阻塞的模式下,无法将数据放入到消息队列而报错。

int queue_create(queue_inst_t *a_p_inst) {if (a_p_inst == NULL ) {printf("queue_create invalid arguments\n");return -1;}int idx;for (idx = 0; idx < MBOX_MAX_NUM; idx++) {if (sg_mbox[idx].m_is_used == false) {sg_mbox[idx].m_is_used = true;break;}}if (idx == MBOX_MAX_NUM) {return -1;}a_p_inst->m_idx = idx;sprintf(sg_mbox[idx].m_queueName, "/tmp/queue_%d", idx);FILE *file = fopen(sg_mbox[idx].m_queueName, "a");if (file == NULL ) {printf("fopen %s failed, Err: %s\n", sg_mbox[idx].m_queueName,strerror(errno));return -
http://www.xdnf.cn/news/11362.html

相关文章:

  • C#-TimeSpan格式化字符串格式
  • GoAhead4 - 用户认证
  • 五种多目标优化算法(MOFA、NSWOA、MOJS、MOAHA、MOPSO)性能对比(提供MATLAB代码)
  • jxl使用总结(三)
  • Git命令操作【全系列】
  • 植物大战僵尸汉化教程 怎样玩中文版的植物大战僵尸
  • 一文看懂人机对话
  • Glassfish安装、基本使用、在idea中配置Glassfish
  • C# List用法 List介绍
  • 三极管工作原理详解
  • 数据库的底层原理,你知道吗?
  • 详解Python文件: .py、.ipynb、.pyi、.pyc、​.pyd !
  • C语言面试题大汇总
  • 最大矩形面积问题——单调栈法
  • Wireshark零基础使用教程(超详细)_wireshark使用教程
  • linux删除命令
  • 什么是Proxy Server
  • Java IO
  • 15款方便实用在线PDF转换器
  • C-Free使用教程(使用C-Free编写C语言程序)
  • 20230507使用python3批量转换DOCX文档为TXT
  • Android组件化跨进程通信框架Andromeda解析(1)
  • innerText,innerHTML的用法以及注意事项
  • Linux 内核(Kernel)组成分析
  • 建议收藏万字长文!嵌入式Linux系统移植原理与方法总结
  • 码率(Bitrate)、帧率(FPS)、分辨率和清晰度的联系与区别
  • srcollTop、clientHeight、scrollHeight详解
  • 【linux3.10】从mmap的实现来看vma的组织和使用
  • 解决mfc100u.dll丢失
  • ffmpeg和H264视频的编解码