send(P,消息)
:把一个消息发送给进程 P
receive(Q,消息)
:从进程 Q
接收一个消息通常一个进程可以与多个进程通信, 即可以向多个进程发送消息,也可以接收来自多个进程的消息。为了便于进程接收和处理这些消息,一般采用「消息队列」通信机制,将消息组织成消息队列,用链指针链接起来,头指针放在进程的 PCB 中。
消息记录体可以表示为
type Msg = record
MsgSend;
MsgSize;
MsgText;
MsgNext;
end
PCB 中部分数据可以表示为
type PCB = record
......
Msgmq; // 首指针
MsgMutex; // 互斥信号量
MsgSm; // 资源信号量
......
end
用图像可以表示为
具体来说,发送时
wait(mutex);
将消息链入队列;
signal(mutex);
signal(swait);
接受时
wait(swait);
wait(mutex);
从队列中摘取消息;
signal(mutex);