操作系统学习笔记(11) 互斥和同步的解决方案-消息传递
来源:互联网 发布:曦力音视频转换软件 编辑:程序博客网 时间:2024/06/06 05:33
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
- 操作系统学习笔记(11) 互斥和同步的解决方案-消息传递
- 操作系统学习笔记(8) 互斥和同步的实现算法
- 操作系统学习笔记(9) 互斥和同步的信号量算法
- 操作系统学习笔记(10) 互斥和同步的经典问题
- 操作系统学习笔记(13) 互斥与同步的经典问题 -哲学家进餐问题
- 【操作系统笔记】同步与互斥的区别和联系
- 操作系统精髓与设计原理学习笔记五:并发性(互斥和同步)
- 【操作系统学习】(二)同步互斥
- 操作系统学习笔记——进程互斥与同步
- 操作系统课程设计-线程和进程的同步与互斥
- 操作系统--进程间的通信,同步和互斥等
- 操作系统读书笔记-互斥和同步
- 操作系统清华向勇陈渝版笔记(九) 同步协同多道程序设计和并发问题,同步互斥,死锁,临界区
- 操作系统概论(3) --进程的同步与互斥
- 操作系统的互斥与同步
- 操作系统--进程的互斥与同步
- Linux学习笔记:内核同步和互斥机制的简要总结
- c# 多线程学习笔记(二)互斥,同步
- LINUX安全命令
- Linux学习笔记——管道PIPE
- Android VOLD 分析
- abap 函数总结
- 取消svn add
- 操作系统学习笔记(11) 互斥和同步的解决方案-消息传递
- 主题:war、jar包的打包方法,命令行方式和使用jbuilder或者eclipse
- 分享一些android题目
- pipe
- [C++] 如何枚举所有打印机
- 山外有山
- 山外有山
- Segmentation fault(段错误)探究
- (zt)int()字段类型长度 问题