进程的同步和互斥
背景
- 多个进程一起执行有很多好处,但执行时容易产生资源共享的问题
进程的交互
- 互斥(一个进程占用某资源,则其他进程不能使用该资源)
- 死锁(多个进程占用各自部分资源,形成循环等待)
- 饥饿(一些进程轮流占用一个资源,导致一个进程一直无法得到该资源执行)
同步和互斥
- 同步亦称直接制约关系,异步亦称简介制约关系
- 同步例子:输入程序A通过单缓冲向B发送数据。缓冲区为空时B阻塞,缓冲区满时A阻塞
- 异步例子:当一个进程访问临界区时另一个进程需要等待,等它退出之后才能访问
临界区
- 许多物理设备都属于临界资源,还有许多变量和数据等被若干进程共享,也属于临界资源
- 访问临界资源的那段代码称为临界区
- 访问临界资源,依次包括进入区,临界区,退出区,剩余区
实现进程互斥访问临界区的方法
- 禁用中断(硬件方法)
- 软件方法
- 更高级的抽象方法(硬件方法)
方法一:禁用中断
- 禁用中断方法的缺点
基于软件的同步方法
-
两个进程间通过共享变量实现(比较麻烦)
-
注意while是个死循环,条件不满足时会不断等待
- 方法一缺点:如果另一个进程未进入临界区,则该进程也无法进入临界区
扫描二维码关注公众号,回复:
10055621 查看本文章
- 方法二缺点:有可能同时进入临界区
- 方法三缺点:可能两个都进入不了
Peterson算法
- 后写的满足条件,会循环等待,进不去,先写的进入
Dekkers
- 容易扩展到多线程
N线程实现方法
高级抽象的同步方法
- ?