同步与互斥
多道程序环境下,进程并发执行,不同进程之间存在不同的相互制约关系。
同步——直接制约关系
互斥——间接制约关系
临界区互斥的实现方法
软件实现方法
单标志法
标志turn用于指示允许进入临界区的进程。
双标志先检查法
双标志后检查法
Peterson算法
硬件实现方法
通过硬件支持实现临界互斥问题的方法称为低级方法,或称元方法。
中断屏蔽方法
TestAndSet指令
Swap指令
硬件方法的优点:适用于任意数目的进程,而不管是单处理机还是多处理机;简单、容易验证其正确性。可以支持进程内有多个临界区,只需为每个临界区设立一个布尔变量。
硬件方法的缺点:进程等待进入临界区时需要耗费处理机时间,不能实现“让权等待”;从等待进程中随机选择一个进入临界区,有的进程可能一直选不上,导致“饥饿”现象。
互斥锁
解决临界区问题最简单的工具就是互斥锁(mutex lock)。一个进程在进入临界区时应该获得锁,在退出临界区时释放锁。
available:布尔变量,指示锁是否可用。
acquire():获得锁。当锁是可用的(available = true),成功获得锁(设置available = false)
release():释放锁。设置available = true
acquire()和release()操作必须是原子操作(即硬件实现的),当有一个进程在临界区内时,其他进程在进入临界区时必须循环调用acquire()。当多个进程共享同一CPU时,就浪费了CPU周期。因此,互斥锁常用于多处理机系统,一个线程可以在一个处理机上忙等,不影响其他线程的执行。
信号量机制
整型信号量
记录型信号量
信号量操作实现互斥\同步\前驱
前V,P后