消息缓冲通信进程
一、实习内容
消息缓冲通信过程(发送与接收)
要求:
(1)发送进程A创建消息;
(2)执行send(B,a)后,查看进程B的进程控制块(PCB)表中mq,mutex,sm的情况,查看消息缓冲区中内容。
二、实习目的
模拟实现进程间通信过程,理解进程通信的基本原理与所用数据结构,消息缓冲区、信号量及消息队列的有关算法。
三、实验数据结构及符号说明
1、进程控制块(PCB)
typedef struct PCB
{
string name;
semaphore mutex;
semaphore sm;
message *mq;
PCB(string n = "")
{
name = n;
= 1;
= 1;
mq = NULL;
}
}PCB;
2、消息缓冲区
typedef struct message
{
string sender;
int size;
string text;
message *next;
message()
{
sender = "";
size = -1;
text = "";
next = NULL;
}
}message;
message *msg = new(message);
message *back = msg;
3、信号量
typedef struct
{
int value;//PCB *list;
}semaphore;
四、程序源代码
#include <iostream>
#include <queue>
#include <string>
using namespace std;
typedef struct message //消息缓冲区声明
{
string sender; //消息发送者
int size; //消息长度
string text; //消息正文
message *next; //指向下一个消息缓冲区
message()
{
sender = "";
size = -1;
text = "";
next = NULL;
}
}message;
message *msg = new(message); //消息缓冲区
message *back = msg;
typedef struct //信号量
{
int value;
//PCB *list;
}semaphore;
typedef struct PCB //进程控制块
{
string name; //进程名
semaphore mutex; //互斥信号量
semaphore sm; //资源信号量
message *mq; //消息队列首指针
PCB(string n = "")
{
name = n;
= 1;
= 1;
mq = NULL;
}
}PCB;
void P(semaphore& s)
{
--;
if( < 0)
{
cout << "进程阻塞" << endl;
}
}
void V(semaphore& s)
{
++;
if( <= 0)
{
cout << "唤醒进程" << endl;
}
}
void showProcess(PCB& B) //查看消息队列
{
cout << "进程" << << "信息" << endl;
if( == NULL)
{
cout << "消息队列为空" << endl;
}
else
{
message *q = ;
while(q != NULL)
{
cout << "消息发送者:" << q->sender << " 消息长度:" << q->size << " 消息正文:" << q->text << endl;
q = q->next;
}
}
cout << "互斥信号量 mutex:" << << endl;
cout << "资源信号量 sm:" << << endl;
cout << endl;
return;
}
void showBuffer() //查看
消息缓冲通信进程 来自淘豆网m.daumloan.com转载请标明出处.