进程同步与互斥
有时并发的几个进程为了完成某个任务,需要按一定顺序先后进行操作,这种顺序就是直接制约关系,又叫进程同步。在同步操作时,多个进程需要访问同一个资源,这个资源叫临界资源。一个进程访问临界区时,其他进程都无法访问,这叫间接制约关系,也叫互斥。
互斥访问临界资源代码的组成部分:
- 进入区:负责检查能否进入临界区,如果可以,就设置正在的访问的标志,可以理解为加锁。
临界区:访问临界资源并操作数据的代码段。 - 退出区:解除正在访问临界区的标志,可以理解为解锁。
剩余区:其他操作。
互斥访问的原则:
- 空闲让进:临界区没有进程时,可以允许请求访问临界区的进程访问。
- 忙则等待:如果有线程在访问临界区,其他线程必须等待。
有限等待:进程等待的时间必须是有限的。 - 让权等待:如果进程无法访问临界区,那么就得释放处理机。
互斥访问算法: - 单标志法:设计一个“标志”,是布尔型变量,如果想访问临界区就设为true。在进入区只检查标志,不进行上锁。违反了忙则让进原则。
- 双标志先检查:标志是一个布尔型变量的数组,如果线程1想访问临界区,就把下标为1的元素设为true,先检查标志再加锁。如违反忙则等待原则
- 双标志后检查:先加锁后检查。违反空闲让进、有限等待。
- Pterson算法:在双标志后检查加法中遇到都想进入线程。违反让权等待原则。
- <