操作系统学习笔记(11) 互斥和同步的解决方案-消息传递

  1 进程的互斥与同步方法:消息传递
  2
  3 低级通信:进程之间交换控制信息的过程。
  4 高级通信:进程之间交换批量数据的过程。
  5
  6 进程之间的同步与互斥是低级通信。
  7
  8 常见的进程通信机制:
  9
 10     基于共享储存区方式:
 11     1。不要求数据移动,一般用于本地通信。
 12     2。通过程序设计来实现。
 13     3。OS在内存中划分一块区域作为共享区。
 14
 15     消息传递机制:
 16     1。消息的格式:{消息头,消息体}。
 17     2。进程通信的两条原语:
 18         Send(destination, message)
 19         Receive(source, message)
 20     3。消息传递的同步:(3种方式)
 21         阻塞发送,阻塞接收
 22         不阻塞发送,阻塞接收
 23         不阻塞发送,不阻塞接收
 24     邮箱机制:
 25
 26 利用消息传递实现互斥:
 27     1。采用“不阻塞发送,阻塞接收”方式。
 28     2。邮箱初始化为一个“空”消息。
 29     算法:
 30     procedure p(int i){
 31         message msg;
 32         while(true){
 33             receive(mutex, msg);
 34             <临界区>;
 35             send(mutex, msg);
 36         }
 37     }
 38
 39     int main(){
 40         create_mailbox(mutex);
 41         send(mutex, null);
 42         p(1);
 43         p(2);
 44         ...
 45         p(n);
 46
 47         retrun 0;
 48     }
 49     注意:“空”消息,代表消息体为空。
 50
 51 利用消息传递解决生产者/消费者问题:
 52     //main
 53     int main(){
 54         create_mailbox(mayproduce);//创建共享数据区
 55         create_mailbox(mayconsume);//创建共享数据区
 56         //初始化为null
 57         for(i = 1; i <= capacity; ++i){
 58             send(mayproduce, null);
 59         }
 60         producer();
 61         consumer();
 62     }
 63     //procedure producer;
 64     producer(){
 65         var pmsg = message;
 66         while(true){
 67             receive(mayproduce, pmsg);
 68             pmsg = produce;
 69             send(mayconsume, pmsg);
 70         }
 71     }
 72     //procedure consumer
 73     consumer(){
 74         var cmsg = message;
 75         while(true){
 76             receive(mayconsume, cmsg);
 77             consume(cmsg);
 78             send(mayproduce, null);
 79         }
 80     }
 81
 82

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值