进程管理 三 同步与互斥问题

发布时间 2023-03-23 12:29:04作者: 他太冷静了

同步与互斥

多道程序环境下,进程并发执行,不同进程之间存在不同的相互制约关系。
同步——直接制约关系
互斥——间接制约关系
image.png

临界区互斥的实现方法

软件实现方法

单标志法

标志turn用于指示允许进入临界区的进程。
image.pngimage.png

双标志先检查法

image.png

双标志后检查法

image.png

Peterson算法

image.png


image.png


硬件实现方法

通过硬件支持实现临界互斥问题的方法称为低级方法,或称元方法。

中断屏蔽方法

image.png

TestAndSet指令

image.png

Swap指令

image.png


image.png

硬件方法的优点:适用于任意数目的进程,而不管是单处理机还是多处理机;简单、容易验证其正确性。可以支持进程内有多个临界区,只需为每个临界区设立一个布尔变量。

硬件方法的缺点:进程等待进入临界区时需要耗费处理机时间,不能实现“让权等待”;从等待进程中随机选择一个进入临界区,有的进程可能一直选不上,导致“饥饿”现象。

互斥锁

解决临界区问题最简单的工具就是互斥锁(mutex lock)。一个进程在进入临界区时应该获得锁,在退出临界区时释放锁。
available:布尔变量,指示锁是否可用。
acquire():获得锁。当锁是可用的(available = true),成功获得锁(设置available = false)
release():释放锁。设置available = true

acquire()和release()操作必须是原子操作(即硬件实现的),当有一个进程在临界区内时,其他进程在进入临界区时必须循环调用acquire()。当多个进程共享同一CPU时,就浪费了CPU周期。因此,互斥锁常用于多处理机系统,一个线程可以在一个处理机上忙等,不影响其他线程的执行。

信号量机制

image.png

整型信号量

Screenshot from 2022-09-29 16-46-09.png

记录型信号量

image.png
image.png

信号量操作实现互斥\同步\前驱

image.png
image.png

前V,P后

image.pngimage.png

经典同步问题

生产者-消费者问题

image.pngimage.pngimage.png

多生产者-多消费者问题

image.pngimage.pngimage.pngimage.png
image.pngimage.pngimage.png

抽烟者问题

image.pngimage.pngimage.png

读写问题

image.pngimage.pngimage.pngimage.png

哲学家进餐问题

image.pngimage.pngimage.png
image.pngimage.png

管程

image.pngimage.pngimage.pngimage.png

死锁

image.pngimage.pngimage.pngimage.png

预防死锁

image.pngimage.pngimage.pngimage.png

避免死锁

image.pngimage.pngimage.png

死锁的检测和解除

image.pngimage.pngimage.pngimage.png