进程互斥的软件实现方法

进程互斥的软件实现方法

进程互斥遵守的原则

空闲让进:临界区空闲时,应允许一个进程访问。

忙则等待:临界区正在被访问时,其他试图访问的进程需要等待。

有限等待:要在有限时间内进入临界区,包装不会饥饿。

让权等待:进不来临界区的进程,要释放处理机,防止忙等

单标志法

算法思想

两个进程在访问完临界区后会把使用临界区的权限交给另一个进程。也就是说每个进程进入临界区的权限只能被另一个进程赋予。

turn 的初值为0,即刚开始只允许0号进程进入临界区。

若P1先上处理机运行,则会一直卡在5。直到P1的时间片用完,发生调度,切换P0上处理运行。

代码1不会卡住P0,P0可以正常访问临界区,在P0访问临界区期间即使切换回P1,P1依然会卡在5 。

因此,该算法可以实现”同一时刻最多只允许一个进程访问临界区”。

turn 表示当前允许进入临界区的进程号,而只有当前允许进入临界区的进程在访问了临界区之后,才会修改 turn 的值。也就是说,对于临界区的访问,一定是按P0??P1??P0??P1??……这样轮流访问。

这种必须”轮流访问”带来的问题是,如果此时允许进入临界区的进程是P0,而P0一直不访问临界区,那么虽然此时临界区空闲,但是并不允许P1访问。

因此,单标志法存在的主要问题是:违背”空闲让进”原则。

双标志先检查法

算法思想

设置一个布尔型数组flag[ ],数组中各个元素用来标记各进程想进入临界区的意思,比如”flag[0]=true”意味着0号进程P0现在想进入临界区。每个进程在进入临界区之前先检查当前有没有别的进程想进入临界区,如果没有,则把自身对应的标志flag[i] 设为true,之后开始访问临界区。

若按照1、5、2、6、3、7……的顺序执行,P0和P1将会同时访问临界区。

因此,双标志先检查法的主要问题是:违法”忙则等待”原则。

原因在于,进入区的”检查”和”上锁”前后可能发生进程的切换。

双标志后检查法

算法思想

双标志先检查法的改版。前一个算法的问题是先”检查”后”上锁”,但是这两个操作又无法一气呵成,因此导致了两个进程同时进入临界区的问题。因此,人们又想到先”上锁”后”检查”的方法,来避免上述问题。

若按照1、5、2、6…的顺序执行,P0和P1将都无法进入临界区。

因此,双标志后检查法虽然解决了”忙则等待”的问题,但是又违背了”空闲让进”和”有限等待”原则,会因各进程都长期无法访问临界资源而产生”饥饿”现象。

Peterson算法

算法思想

双标志后检查法中,两个进程都争着想进入临界区,但是谁也不让谁,最后谁都无法进入临界区。Gary L.Peterson想到了一种方法,如果双方都争着想进入临界区,那么可以让进入尝试”孔融让梨”,主动让对方先使用临界区。

进入区:

  1. 主动争取
  2. 主动谦让
  3. 检查对方是否也想使用,且最后一次是不是自己说了”客气话”

Peterson算法用软件方法解决了进程互斥问题,遵守了空闲让进、忙则等待、有限等待三个原则,但是依然为遵守让权等待的原则。 

文章知识点与官方知识档案匹配,可进一步学习相关知识算法技能树首页概览34449 人正在系统学习中

来源:?oOoOoOooOO

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年11月3日
下一篇 2021年11月3日

相关推荐