进程同步之Perterson算法

来源:互联网 发布:淘宝纯露哪家比较好 编辑:程序博客网 时间:2024/05/29 18:04

进程同步主要用来解决临界区问题,简单来讲就是确保同一时间只能有一个进程访问临界区。现在介绍一个比较经典的Peterson算法。

Peterson算法的表述如下:对于进程Pi和Pj来说,设置一个整数变量turn来确定谁可以进入临界区,和一个整型数组flag[2]来确定谁想进去临界区。

do{

flag[i]=true;

turn= j;

while(flag[j]==1 && turn ==j);

//临界区

flag[i] =false;

//剩余区

 }

我们可以这么理解这段代码。对于一个进程Pi而言,如果它想进入临界区,首先它要告诉操作系统它想进入临界区(flag[i]=true),但此时它还不能进入临界区。这时操作系统说,由于进程Pi没有进入临界区,进程Pj就可以进入临界区(turn=j)。当然Pj也可以选择不进入临界区,那么Pi就进入临界区,在它操作完成之后,它需要告诉操作系统自己不再想进入临界区了,然后把flag[i]设为false,以避免占有“进入的欲望”。但是,如果进程Pj选择进入临界区,那么进程Pi就得等待,也就是代码中的for循环。

这个代码的设计思路在于——“让”。进程Pi提出请求后,操作系统会先把进入权给予其他进程,确保其他进程都不想进入的情况把,才允许进程Pi进入临界区。

更多讲解,请参看《操作系统概念(第7版)》P169.

原创粉丝点击