一、互斥访问的过程和原则

1、前提

  • 进程是并发执行的,进程间存在着相互制约关系
  • 并发的进程对系统共享资源进行竞争
  • 进程通信,过程中相互发送的信号称为消息或事件

2、两种相互制约形式

  • 间接相互制约关系(互斥) :进程排他性地访问共享资源
  • 直接相互制约关系(同步) :进程间的合作,比如管道通信

3、访问过程

  • 进入区:尝试进入临界区,成功则加锁(lock)
  • 临界区:访问共享资源
  • 退出区:解锁(unlock) ,唤醒其它阻塞进程
  • 剩余区:其它代码

进程同步_访问共享

4、访问原则

  • 空闲让进:临界区空闲,允许一个进程进入
  • 忙则等待:临界区已有进程,其它进程等待(阻塞状态)
  • 有限等待:处于等待的进程,等待时间有限
  • 让权等待:等待时应让出CPU执行权,防止“忙等待”
二、互斥的软件实现方法

1、软件实现方法

  • 单标志法:违背“空闲让进”

进程同步_信号量_02

  • 双标志法先检查

进程同步_临界区_03

  • 双标志法后检查

进程同步_访问共享_04

  • 皮特森算法(Peterson's Algorithm)

进程同步_临界区_05

2、硬件实现方法

  • 中断屏蔽

进程同步_临界区_06

  • TSL指令
    进程同步_临界区_07

  • Swap指令
    进程同步_忙等待_08

三、信号量机制

1、整型信号量

进程同步_互斥_09

2、记录型信号量

进程同步_互斥_10

四、管程

进程同步_信号量_11
进程同步_忙等待_12

五、条件变量(条件对象)

进程同步_访问共享_13