基本概念
进程同步:异步环境下的一组并发进程因直接制约而互相发送消息、互相合作、互相等待,使得各进程按一定的速度执行的过程。
协作进程:具有同步关系的一组并发进程。
制约关系
- 间接相互制约关系(互斥关系):对于系统中的这类资源,必须由系统实施统一分配,即用户在要使用这类资源之前应先提出申请,而不能直接使用;
- 直接相互制约关系(同步关系):两个或多个进程会为了完成同一任务而相互合作。
- 互斥是同步的一个特例,同步强调的是保证进程之间操作的先后次序的约束,而互斥强调的是对共享资源的互斥访问。
临界区问题
临界区:在每个进程中访问临界资源的那段代码;
进入区:一段用于进行检查(将临界区未被访问的标志变为正被访问的标志)的代码;
退出区:一段用于将临界区正被访问的标志恢复为未被访问的标志的代码;
剩余区:除进入区、临界区及退出区之外的其他部分的代码。
- 解决临界区问题的同步机制应遵循的准则:(1)空闲让进;(2)忙则等待;(3)有限等待;(4)让权等待(原则上应遵循,但非必要)。
软件同步机制
Peterson解决方案
硬件同步机制
关中断
利用Test-and-Set指令实现互斥
利用swap指令实现进程互斥
信号量机制
信号量的应用
管程机制
经典的进程同步问题
生产者-消费者问题
- 利用记录型信号量解决
- 利用AND型信号量解决
- 利用管程解决
哲学家进餐问题
- 利用记录型信号量解决
- 利用AND型信号量解决
- 利用管程解决
读者-写者问题