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) 互斥和同步的解决方案-消息传递
最新推荐文章于 2020-12-06 23:41:02 发布