进程互斥的软件实现方法

2025-05-25 13:08:01

1、单标志法2、双标志先检查法3、双标志后检查法4、Peterson算法

单标志法

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

2、单标志法可以实现“同一时刻最多只允许一个进程访问临界区”。

3、如果有两个进程A、B,那他们访问的顺序为A--->B--->A--->b...,而这种必须“轮流访问”带来的问题是,如果此时允许进入临界区的进程是B,而A一直不访问临界区,那么虽然此时临界区空闲,但是并不允许B访问。因此,单标志存在的主要问题是违背“空闲让进”原则。

双标志先检查法

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

2、如果有两个进程A、B,由于进程的异步性,A想进入临界区的时候检查B的状态,发现B的flag为false,没有进入临界区,之后A要把自己的flag标志置为true然后进入临界区,但在A还没有将自己的flag设置成功时,系统切换进程B运行,此时B检查发现A的flag为false(因为A的flag还没设置成功),意味着B现在也可以进入临界区,B也开始设置自己的flag,此时系统再切换为A进程。这样就会导致进程A、B同时访问临界区的问题。

3、由于这种进入区的“检查”和“上锁”两个处理不是一气呵成的,“检查”后,“上锁”前可能发生进程切换。因此,双标志先检查法的主要问题是违反“忙则等待”的原则。

双标志后检查法

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

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

Peterson算法

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

2、通过再引入一个标志位turn,当两个都可以进入临界区时将turn设置为对方进程表示自己让对方先进,然后用自己是否想进入的状态和turn标志位来判断是否应该进入临界区。

3、例如有A、B两进程现在都是想要进入临界区并且都可以让步的状态,即flag[A] = true,turn = B;flag[B]=true,turn = A,那么A先进入临界区的条件是flag[帆歌达缒A] = true &&turn = A,B先进入临界区的条件是flag[B]=true &&turn = B。所以此时turn的状态就是关键了,在进程切换中如果先运行的是A进程,那A进程将会先进入临界区,如果先运行的是B进程,则B进程会先进入临界区。(例如走路迎面遇到一个人,你先让他,他再让给你,则你先走;如果他先让你,你再让他,则他先走,所以最后一次是谁说了客气话就让对方走)

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

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢