通过消息队列实现线程间通讯

本文介绍了如何在多线程环境中采用消息队列作为通讯机制。通过mq_open、mq_close、mq_unlink、mq_receive和mq_send等接口,实现主线程创建消息队列,子线程进行消息收发的功能。
摘要由CSDN通过智能技术生成

之前一直在做单线程的工作,最近上位模块变动,需要通过一个小模块来封装已有的接口,来实现与新的上位模块间的通讯。

于是做了一项调查,如何实现线程间通讯。

最终选定了消息队列来实现这个需求:

用到的接口如下:

mq_open : 打开一个消息队列

mq_close : 关闭一个消息队列

mq_unlink : 删除一个消息队列

mq_receive : 接收消息

mq_send : 发送消息

实现上很简单,一个主线程创建一个消息队列,子线程接收消息,代码如下:

/* example.c*/
#include <stdio.h>
#include <pthread.h>
#include <mqueue.h>
#include <unistd.h>
#include <errno.h>

#define MAX_SIZE	1024
#define msg_stop	"exit"
#define QUEUE_NAME	"/thread_mq"
//#define QUEUE_NAME	"/home/cyw/tools/thread_mq"

void thread(void)
{
	mqd_t mq;
	ssize_t size;
	char buffer[MAX_SIZE];
	int count;
	count = 0;


	
	mq = mq_open (QUEUE_NAME, O_RDONLY); //O_RDWR | O_CREAT );
	if ((mqd_t) -1 == mq)
	{
		printf("open
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值