学习笔记】"/>
进程互斥的软件实现方法【操作系统学习笔记】
18.进程互斥的软件实现方法
文章目录
- 18.进程互斥的软件实现方法
- 🍅单标志法
- 🍅双标志先检查
- 🍅双标志后检查
- 🍅Peterson算法
🍅单标志法
-
在进入区只做“检查”,不“上锁”
-
在退出区把临界区的使用权转交给另一个进程(相当于在退出区既给另一个进程“解锁”,又给自己"上锁")
- 也就是说每一个进程进入临界区的权限只能被另一个进程赋予
-
主要问题:不遵循“空闲让进”原则
🍅双标志先检查
-
思想:
-
bool flag[2]; flag[0] = false; // 0号不想进入临界区 flag[1] = true; // 1号现在想进入临界区
每个进程在进入临界区之前先检查当前有没有别的进程想进入临界区,如果没有,则把自身对应的标志 flag[i] 设为 true ,之后开始访问临界区
// P1 进程 while (flag[0]); // 如果此时 P0 想进入临界区,P1 就一直循环等待 flag[1] = true; // 标记为 P1 进程想要进入临界区 critical section; // 访问临界区 flag[1] = false; // 访问完临界区,修改标记为 P1 不想使用临界区 remainder section;
-
-
在进入区先“检查”后“上锁”,退出区“解锁”
-
主要问题:不遵循“忙则等待”的原则
- 由于其并发性,可能会有多个进程一起使用临界区,导致不互斥
🍅双标志后检查
-
在进入区先“加锁”后“检查”,退出区“解锁”(先加锁)
// P1 进程 //交换前两句的顺序 flag[1] = true; // 标记为 P1 进程想要进入临界区while (flag[0]); // 如果此时 P0 想进入临界区,P1 就一直循环等待critical section; // 访问临界区 flag[1] = false; // 访问完临界区,修改标记为 P1 不想使用临界区 remainder section;
-
主要问题:不遵循“空闲让进,有限等待”原则,可能导致“饥饿”
- 其并发执行的异步性可能让两个进程同时把对方都锁了,结果导致死局
🍅Peterson算法
- 思想:
- 双标志后检查法可能导致两个进程同时占住临界区,谁也不让着谁,导致三个和尚没水喝。这个算法的想法是:如果双方都想进入临界区,则可以尝试“孔融让梨”,主动让对方使用临界区
- 在进入区“主动争取—主动谦让—检查对方是否想进,己方是否谦让”
- 主要问题:不遵循“让权等待”原则,会发生“忙等”
- “您先请”,“别别别,您先请”。于是两人就在此僵持了好久,太谦让也不是好事
Peterson算法相较于前面三种解决方法,是最好的,但仍然是矮子里拔高个,不够好
更多推荐
进程互斥的软件实现方法【操作系统学习笔记】
发布评论