
(以下内容全部来自上述课程)
目录
- 同步、互斥问题
-
- [1. 什么是进程同步](#1. 什么是进程同步)
- [2. 什么是进程互斥](#2. 什么是进程互斥)
- [3. 小结](#3. 小结)
- 进程互斥的软件实现方法
-
- [1. 单标志法](#1. 单标志法)
- [2. 双标志先检查法](#2. 双标志先检查法)
- [3. 双标志后检查法](#3. 双标志后检查法)
- [4. Peterson算法](#4. Peterson算法)
- [5. 小结](#5. 小结)
- 进程互斥的硬件实现方法
-
- [1. 中断屏蔽方法](#1. 中断屏蔽方法)
- [2. TestAndSet指令](#2. TestAndSet指令)
- [3. Swap指令](#3. Swap指令)
- [4. 小结](#4. 小结)
- 锁
- 信息量机制(一)
-
- [1. 整型信息量](#1. 整型信息量)
- [2. 记录型信号量](#2. 记录型信号量)
- [3. 小结](#3. 小结)
- 信息量机制(二)
-
- [1. 实现进程互斥](#1. 实现进程互斥)
- [2. 实现进程同步](#2. 实现进程同步)
- [3. 实现进程的前驱关系](#3. 实现进程的前驱关系)
- [4. 小结](#4. 小结)
同步、互斥问题

1. 什么是进程同步
异步性 :随机,自己没办法控制。
同步 :就是解决异步性随机的问题,让进程变得可控。

异步 :没办法控制写数据和读数据的顺序,可能写先读后,也可能读先写后。
同步 :我们需要的是写先读后(毕竟不先写啥都读不到),就需要使进程可控,这个过程就是同步。

2. 什么是进程互斥
互斥 :就是两个人上厕所用马桶,不可能一个人用马桶但是还没用完呢,另外一个人直接把马桶抢过来吧。
同时 :这个东西可以这个人用了但是还没用完 ,另外一个人更急就可以让给他,从更宏观的时间来看可以算是同时。

进入区 :看看临界资源区能不能用,有没有人占着用不了。
临界区 :放临界资源的地方。(可以类比马桶啦其实)
退出区 :自己用完了,告诉别人这个资源可以给别人用了。
剩余区 :用完资源就去干别的事儿了呗。

空闲让进 :马桶没人用的时候,可以让任何人用。
忙则等待 :马桶有人用,自己就等着呗。
有限等待 :这个坑自己等的时间太久了,就换一个坑呗。
让权等待 :比如这个景区的厕所收费,有个人没拿钱用不了,就赶紧让他走,让别人上。

3. 小结

进程互斥的软件实现方法


1. 单标志法
while (turn != 0);:trun=0时不符合循环条件,就可以向下执行,可以访问临界区。
while (turn != 1);:turn=0时符合循环条件,就一直死循环,直到p0执行完turn=1时,才会跳出循环。

劣势 :必须轮流,一个用完了才会轮到另外一个,所以前者一直不用,但是后者突然要用了,就只能等。

2. 双标志先检查法
问对方用不用-->对面不用自己再用。(过分谦让)
while(flag[1]);:如果falg[1]=true,符合条件就自己死循环让p1先访问,可惜flag[1]=false(初始赋值),不符合条件,就要自己访问了。
falg[0]=true;:给p0,也就是自己访问临界区了,给临界区上个锁不让别人进来。
以上p1同理。

假设流程 :B没说想用马桶-->A没说想用马桶-->A以为B不用所以自己用-->B以为A不用所以自己也用-->一个马桶两个人用(蚌埠住了)
劣势 :如果是异步的,可能造成两个人用一个马桶的奇怪情况,也就是没符合忙则等待。

3. 双标志后检查法
实际上就是把确认对方意愿的步骤往后放:先抢-->再问对方用不用。(过分缺德)
就是开抢,不管对面儿用不用

劣势 :两边儿光顾着抢了,一个用上厕所的都没。

4. Peterson算法
融合之前的几种方法,改为了先询问再谦让 的方法。(很礼貌了)
while(flag[1]&&turn==1):p1要是用(也就是flag[1]=true),并且turn=1(前面定义了,直接白给,就是你要用就用的意思)

谁最后谦让谁没主动权就是了。



5. 小结

进程互斥的硬件实现方法

1. 中断屏蔽方法
缺点 :权限太高了,不可能让用户自己用,所以很有局限性。

2. TestAndSet指令
注意 :都是用硬件实施的,代码只是为了让自己理解怎么实施的而已。

3. Swap指令

4. 小结

锁


信息量机制(一)

信息量 :剩下几个马桶or打印机,啥都行,剩下几个,信息量就是几。
wait(P) :进入区。
signal(V) :退出区。

1. 整型信息量
就是直接用具体数字 表示数量。

2. 记录型信号量
因为不一定就一个机器,而且谁用谁不用数值来回变,所以干脆就赋个没被定义为具体数字的值 ,机器多几个少几个就不用像数字型的还得自己特意改一下。类似于全自动,解放双手(?)



3. 小结

信息量机制(二)

1. 实现进程互斥
初值为1 :就是把临界区定义为机器了,一台机器(马桶)只能一个进程(人)访问,自然一个临界区只能一个进程进入。

2. 实现进程同步
前操作-->v(s)-->p(s)-->后操作
简单理解:后者执行的前提是前者里面的一条执行语句,也就是我想吃雪糕,但是吃雪糕(p)之前我必须先买雪糕(v)。

3. 实现进程的前驱关系
顺着一条线往下看,一个圆到下一个圆之间有一条路,必经之路,也就是必要条件。

4. 小结
