社区
C语言
帖子详情
POSIX消息队列需要增加信号量保护么
dd8924
2018-04-07 06:45:22
之前经历了几个项目,都是while(1){mq_recv(); //TODO:}这个模式接收。现在有人提出增加信号量的供求关系,如:while(1){acquire semphone; mq_recv(); // TODO:},往目标队列发送消息时释放信号量。
这样的目的是空队列时避免程序空跑,设备还有可能休眠但app继续运行。
不过我的理解是POSIX这套机制应该可以避免这个空队列的情况吧?理解的不深,希望谁能帮解答下吧,感谢大家了
...全文
598
1
打赏
收藏
POSIX消息队列需要增加信号量保护么
之前经历了几个项目,都是while(1){mq_recv(); //TODO:}这个模式接收。现在有人提出增加信号量的供求关系,如:while(1){acquire semphone; mq_recv(); // TODO:},往目标队列发送消息时释放信号量。 这样的目的是空队列时避免程序空跑,设备还有可能休眠但app继续运行。 不过我的理解是POSIX这套机制应该可以避免这个空队列的情况吧?理解的不深,希望谁能帮解答下吧,感谢大家了
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
赵4老师
2018-04-08
打赏
举报
回复
百度搜相关关键字。
实现
posix
消息队列
示例分享
主要介绍了实现
posix
消息队列
示例,学习记录锁,线程互斥量,线程条件变量,内存映射,信号,线程的综合应用,
需要
的朋友可以参考下
linux下几种最常用的IPC接口,这样一来,统一了接口,提高代码重用性.rar
管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信; 信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数signal外,还支持语义符合
Posix
.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数); 报文(Message)队列(
消息队列
):
消息队列
是消息的链接表,包括
Posix
消息队列
system V
消息队列
。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。
消息队列
克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。 共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如
信号量
lqueue:C11 + Pthreads 原子有界工作队列
C11 + Pthreads 原子有界工作队列 这是一个使用 C11 的stdatomic.h特性提供单写入器、多读取器无锁队列 (lqueue) 的小型库。 该队列使用
POSIX
线程和
信号量
封装在多线程工作队列 (wqueue) 中。 功能指针/参数元组形式的作业被提交到队列,并由队列的线程完成,在队列已满时根据
需要
阻塞。 struct sha1_job { char message[ 64 ]; char hash[SHA1_DIGEST_SIZE * 2 + 1 ]; }; static void sha1_worker ( int thread_id, void *arg) { /* ... compute hashes ... */ } void sha1_compute_all ( void ) { int nthreads = sysc
linux网络编程
Linux网络编程之TCP/IP基础篇 01TCPIP基础(一) ISO/OSI参考模型 TCP/IP四层模型 基本概念(对等通信、封装、分用、端口) 02TCPIP基础(二) 最大传输单元(MTU)/路径MTU 以太网帧格式 ICMP ARP RARP 03TCPIP基础(三) IP数据报格式 网际校验和 路由 04TCPIP基础(四) TCP特点 TCP报文格式 连接建立三次握手 连接终止四次握手 TCP如何保证可靠性 05TCPIP基础(五) 滑动窗口协议 UDP特点 UDP报文格式 Linux网络编程之socket编程篇 06socket编程(一) 什么是socket IPv4套接口地址结构 网络字节序 字节序转换函数 地址转换函数 套接字类型 07socket编程(二) TCP客户/服务器模型 回射客户/服务器 socket、bind、listen、accept、connect 08socket编程(三) SO_REUSEADDR 处理多客户连接(process-per-conection) 点对点聊天程序实现 09socket编程(四) 流协议与粘包 粘包产生的原因 粘包处理方案 readn writen 回射客户/服务器 10socket编程(五) read、write与recv、send readline实现 用readline实现回射客户/服务器 getsockname、getpeername gethostname、gethostbyname、gethostbyaddr 11socket编程(六) TCP回射客户/服务器 TCP是个流协议 僵进程与SIGCHLD信号 12socket编程(七) TCP 11种状态 连接建立三次握手、连接终止四次握手 TIME_WAIT与SO_REUSEADDR SIGPIPE 13socket编程(八) 五种I/O模型 select 用select改进回射客户端程序 14socket编程(九) select 读、写、异常事件发生条件 用select改进回射服务器程序。 15socket编程(十) 用select改进第八章点对点聊天程序 16socket编程(十一) 套接字I/O超时设置方法 用select实现超时 read_timeout函数封装 write_timeout函数封装 accept_timeout函数封装 connect_timeout函数封装 17socket编程(十二) select限制 poll 18socket编程(十三) epoll使用 epoll与select、poll区别 epoll LT/ET模式 19socket编程(十四) UDP特点 UDP客户/服务基本模型 UDP回射客户/服务器 UDP注意点 20socket编程(十五) udp聊天室实现 21socket编程(十六) UNIX域协议特点 UNIX域地址结构 UNIX域字节流回射客户/服务 UNIX域套接字编程注意点 22socket编程(十七) socketpair sendmsg/recvmsg UNIX域套接字传递描述符字 Linux网络编程之进程间通信篇 23进程间通信介绍(一) 进程同步与进程互斥 进程间通信目的 进程间通信发展 进程间通信分类 进程间共享信息的三种方式 IPC对象的持续性 24进程间通信介绍(二) 死锁
信号量
PV原语 用PV原语解决司机与售票员问题 用PV原语解决民航售票问题 用PV原语解决汽车租赁问题 25System V
消息队列
(一)
消息队列
IPC对象数据结构
消息队列
结构
消息队列
在内核中的表示
消息队列
函数 26System V
消息队列
(二) msgsnd函数 msgrcv函数 27System V
消息队列
(三)
消息队列
实现回射客户/服务器 28共享内存介绍 共享内存 共享内存示意图 管道、
消息队列
与共享内存传递数据对比 mmap函数 munmap函数 msync函数 29System V共享内存 共享内存数据结构 共享内存函数 共享内存示例 30System V
信号量
(一)
信号量
信号量
集结构
信号量
集函数
信号量
示例 31System V
信号量
(二) 用
信号量
实现进程互斥示例 32System V
信号量
(三) 用信号集解决哲学家就餐问题 33System V共享内存与
信号量
综合 用
信号量
解决生产者消费者问题 实现shmfifo 34
POSIX
消息队列
POSIX
消息队列
相关函数
POSIX
消息队列
示例 35
POSIX
共享内存
POSIX
共享内存相关函数
POSIX
共享内存示例 Linux网络编程之线程篇 36线程介绍 什么是线程 进程与线程 线程优缺点 线程模型 N:1用户线程模型 1:1核心线程模型 N:M混合线程模型 37
POSIX
线程(一)
POSIX
线程库相关函数 用线程实现回射客户/服务器 38
POSIX
线程(二) 线程属性 线程特定数据 39
POSIX
信号量
与互斥锁
POSIX
信号量
相关函数
POSIX
互斥锁相关函数 生产者消费者问题 自旋锁与读写锁介绍 40
POSIX
条件变量 条件变量 条件变量函数 条件变量使用规范 使用条件变量解决生产者消费者问题 41一个简单的线程池实现 线程池性能分析 线程池实现
C++教程网《Linux网络编程》视频百度云地址
Linux网络编程(总共41集) 讲解Linux网络编程知识,分以下四个篇章。 Linux网络编程之TCP/IP基础篇 Linux网络编程之socket编程篇 Linux网络编程之进程间通信篇 Linux网络编程之线程篇 Linux网络编程之TCP/IP基础篇 01TCPIP基础(一) ISO/OSI参考模型 TCP/IP四层模型 基本概念(对等通信、封装、分用、端口) 02TCPIP基础(二) 最大传输单元(MTU)/路径MTU 以太网帧格式 ICMP ARP RARP 03TCPIP基础(三) IP数据报格式 网际校验和 路由 04TCPIP基础(四) TCP特点 TCP报文格式 连接建立三次握手 连接终止四次握手 TCP如何保证可靠性 05TCPIP基础(五) 滑动窗口协议 UDP特点 UDP报文格式 Linux网络编程之socket编程篇 06socket编程(一) 什么是socket IPv4套接口地址结构 网络字节序 字节序转换函数 地址转换函数 套接字类型 07socket编程(二) TCP客户/服务器模型 回射客户 /服务器 socket、bind、listen、accept、connect 08socket编程(三) SO_REUSEADDR 处理多客户连接(process-per-conection) 点对点聊天程序实现 09socket编程(四) 流协议与粘包 粘包产生的原因 粘包处理方案 readn writen 回射客户/服务器 10socket编程(五) read、write与recv、send readline实现 用readline实现回射客户/服务器 getsockname、getpeername gethostname、gethostbyname、gethostbyaddr 11socket编程(六) TCP回射客户/服务器 TCP是个流协议 僵进程与SIGCHLD信号 12socket编程(七) TCP 11种状态 连接建立三次握手、连接终止四次握手 TIME_WAIT与SO_REUSEADDR SIGPIPE 13socket编程(八) 五种I/O模型 select 用select改进回射客户端程序 14socket编程(九) select 读、写、异常事件发生条件 用select改进回射服务器程序。 15socket编程(十) 用select改进第八章点对点聊天程序 16socket编程(十一) 套接字I/O超时设置方法 用select实现超时 read_timeout函数封装 write_timeout函数封装 accept_timeout函数封装 connect_timeout函数封装 17socket编程(十二) select限制 poll 18socket编程(十三) epoll使用 epoll与select、poll区别 epoll LT/ET模式 19socket编程(十四) UDP特点 UDP客户/服务基本模型 UDP回射客户/服务器 UDP注意点 20socket编程(十五) udp聊天室实现 21socket编程(十六) UNIX域协议特点 UNIX域地址结构 UNIX域字节流回射客户/服务 UNIX域套接字编程注意点 22socket编程(十七) socketpair sendmsg/recvmsg UNIX域套接字传递描述符字 Linux网络编程之进程间通信篇 23进程间通信介绍(一) 进程同步与进程互斥 进程间通信目的 进程间通信发展 进程间通信分类 进程间共享信息的三种方式 IPC对象的持续性 24进程间通信介绍(二) 死锁
信号量
PV原语 用PV原语解决司机与售票员问题 用PV原语解决民航售票问题 用PV原语解决汽车租赁问题 25System V
消息队列
(一)
消息队列
IPC对象数据结构
消息队列
结构
消息队列
在内核中的表示
消息队列
函数 26System V
消息队列
(二) msgsnd函数 msgrcv函数 27System V
消息队列
(三)
消息队列
实现回射客户/服务器 28共享内存介绍 共享内存 共享内存示意图 管道、
消息队列
与共享内存传递数据对比 mmap函数 munmap函数 msync函数 29System V共享内存 共享内存数据结构 共享内存函数 共享内存示例 30System V
信号量
(一) 信
C语言
69,368
社区成员
243,081
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章