之前一直在做单线程的工作,最近上位模块变动,需要通过一个小模块来封装已有的接口,来实现与新的上位模块间的通讯。
于是做了一项调查,如何实现线程间通讯。
最终选定了消息队列来实现这个需求:
用到的接口如下:
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