Linux进程通信IPC--消息队列MessageQueue

本文介绍了Linux下使用Boost库实现进程间通信的MessageQueue机制,包括其工作原理、特点和三种操作方式:阻塞式、Timed阻塞式和Try方式。并提供了创建、发送/接收及删除消息队列的示例代码,强调在发送复杂数据时需要进行序列化和反序列化处理。
摘要由CSDN通过智能技术生成

前言: Linux 进程通信系列文章是对工作中使用的技术进行描述总结,使用了Boost 库IPC 实现,因此文章的代码部分选自Boost example 文档。

消息队列

消息队列(MessageQueue, 以下简称MQ)为同一台计算机进程间通信(IPC)提供了一种方式,提供了从一个进程向另外一个进程发送数据块的方法。

MQ被创建后,不属于任何进程,独立于进程存在,因此MQ必须具有唯一的名称,进程使用名称访问它,此外MQ是持久的存在的,即使创建的进程死亡后仍然留在内存中,需要通过显示调用remove 删除。MQ被创建后,每个进程都可以向消息队列中发送和从消息队列中获取消息,读取过程不可避免产生竞争,也必然需要同步,不过该同步过程由消息队列本身完成,用户不需要关心。

线程通过三种方式向MQ中发送/从MQ中获取消息:
1) 阻塞式:发送消息时,若MQ已满,则发送方将会阻塞等待直到MQ消息取出后有空间, 投递成功后返回;获取消息时,若MQ为空,则获取方阻塞等待直到MQ有新的消息,获取消息成功后返回。

2) Timed 阻塞式:发送方和接收方都自定义超时时间,在该超时时间内阻塞式等待, 若超时时间到了,则发送方无论是否发送成功,接收方无论是否获取成功都会返回,避免一直阻塞等待。

3) Try发送/获取式:发送方尝试发送消息至消息队列,若队列不满,则投递成功返回,否则投递失败但也立即返回;接收方尝试从消息队列中获取消息,若消息队列不为空则获取成功返回,否则获取失败立即返回。该方式特点是:无论MQ是否满或者空,都能立即返回。

消息队列实现

消息队列模型并不复杂,Boost IPC 编程提供了跨平台的消息队列实现,简单方便。

  • 创建/打开消息队列:
message_queue_t(create_only_t create_only,  //仅创建
                 const char *name,          //消息队列名称,进程通过名称访问该消息队列
                 size_type max_num_msg,     //max 消息数量
                 size_type max_msg_size,    //max 消息占用空间
                 const permissions &perm = permissions());

message_queue_t(open_only_t open_only,      //仅打开
                 const char *name);         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值