- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
消息缓冲通信进程
消息缓冲通信进程一、实习内容消息缓冲通信过程(发送与接收)要求:(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;mutex.value = 1;sm.value = 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 stringusing 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;mutex.value = 1;sm.value = 1;mq = NULL;}}PCB;void P(semaphore s){s.value--;if(s.value 0){cout 进程阻塞 endl;}}void V(semaphore s){s.value++;if(s.value = 0){cout 唤醒进程 endl;}}void showProcess(PCB B) //查看消息队列{cout 进程 B.name 信息 endl;if(B.mq == NULL){cout 消息队列为空 endl;}else{message *q = B.mq;while(q != NULL){cout 消息发送者: q-sender 消息长度: q-size 消息正文: q-text endl;q = q-next;}}cout 互斥信号量 mutex: B.mutex.value endl;cout 资源信号量 sm: B.sm.value endl;cout endl;return;}void showBuffer() //查看缓冲区{if(msg-next == NULL){cout \n当前缓冲区为空\n endl;}else{cout \n当前消息缓冲区内容: endl;message *q = msg-next;int count = 0;while(q != NULL){cout ++count .消息发送者: q-sender 消息长度: q-size 消息正文: q-text endl;cout endl;q = q-next
文档评论(0)