Linux多进程_消息通信_设计思想交流
消息队列和管道相比,至少有以下几个特点:
(1)消息队列是双向、双工的。
(2)如果进程数量较多,要互相通信,如果采用管道的话,要创建很多个管道文件。
(3)消息队列先天就是“异步”操作,例如A进程丢进去,B进程再读出来。A丢进去后,A还可以做其他事。不用管B什么时候去读。
例如:
消息发送函数 int SendMSG(int mqid,long mtype,std::string _msg) strcpy(msg.mtext,_msg.data()); msg.mtype=mtype; msgsnd(mqid,&msg,strlen(msg.mtext)+1,0); return 1;
|
(4)消息的读取操作是阻塞方式的,在多线程编程里,相当的省事
例如: 我们启用一个专门的线程来接收消息 void *pthread_MsgHandle(void *arg) { return (void*) (1);
|
那么现在进入正题,谈谈需求。 假设现在有6个进程,相互之间要互相通信。
进程名称依次是:A、B、C、D、E、F
例如:A要发送消息给B、C、D
B要发送消息给D、E、F、A
C要发送消息给D、E、F
。。。。。等等。。。。 可能性实在太多。。。
我们现在用消息队列就是要解决这个问题。
问题看上去很难,实际上只要好好思考,就发现用消息队列很简单。
怎么思考呢?
首先,要创建一个消息队列。
然后做好消息接收【通道】定义。
例如:
#define CH_A 1
#define CH_B 2
#define CH_C 3
#define CH_D 4
#define CH_E 5
#define CH_F 6
总之你有多少个进程要共用这个消息队列,你就定义多少个。