Peterson算法如下:
Peterson提出了简单且一流的方法。 和以前一样,全局数组变量flag表明每个互斥进程的位置,全局变量turn解决同时发生的冲突。
boolean flag[2]; int turn; void P0() { while(true) { flag[0]=true; turn=1; while(flag[1]&&turn==1) /* do nothing */ /* critical section */ flag[0]=false; /* reminder */ } } void P1() { while(true) { flag[1]=true; turn=0; while(flag[0]&&turn==0) /* do nothing */ /* critical section */ flag[1]=false; /* reminder */ } } void main() { flag[0]=false; flag[1]=false; parbegin(P0,P1); }
考虑进程P0,一旦它设置flag[0]为true,则P1不能进入临界区。如果P1已经进入临界区,那么flag[1]=true,P0被阻塞不能进入临界区。
这样就有了一种简单的方法解决两个进程的互斥问题。此外Peterson算法可以很容易地推广到n个进程的情况。另一方面,互相阻塞也避免了。假如P0在while循环里被阻塞了,这表示flag[1]为true,当flag[1]变为false或true变为0时,P0都可以进入临界区。
Peterson算法(软件实现互斥)
最新推荐文章于 2024-12-20 23:58:16 发布