BBS水木清华站∶精华区

发信人: marmot (小土拨鼠), 信区: Unix 
标  题: Re: 关于互斥的算法 
发信站: BBS 水木清华站 (Fri Apr 23 09:28:27 1999) WWW-POST 
 
【 在 katt (散户) 的大作中提到: 】 
 #define FALSE 0 
 #define TRUE  1 
 #define N     2  /*进程数*/ 
 int turn;       /*轮到谁了*/ 
 int interested[N];      /*所有值初始为FALSE*/ 
 void enter-region(int process)  /*进程号为0或1*/ 
 { 
         int other;      /*另一个进程的进程号*/ 
         other = 1 - process;    /*另一个进程*/ 
         interested[process] = TRUE;     /*标识出希望进入临界区*/ 
         turn = process; /*设置标志位*/ 
         while(turn == process && interested[other] == TRUE);    /*空语句*/ 
 } 
 void leave-region(int process)  /*process:即将离开临界区的进程*/ 
 { 
         interested[process] = FALSE;    /*标识将离开临界区*/ 
 } 
 以上一段为一个互斥进程的算法,但其中while一句的两个等号让我糊涂了, 
 谁能解释一下这个算法? 
 
两个进程并发执行时,在同一时刻还是顺序的. 
假如只用一个turn来标志,显然不够的,如果进程1先到,应该先看看turn,是不是没有进程 
来执行, 
然后再决定等待还是赋成自己的进程标志.万一在取出值后、保存值前,另一个进程也刚取 
了turn的值,这就不能保证互斥了. 
 
enter_region中,在执行while时, 
如果interested[other]为false,表示第二个进程没来,他就进入临界区; 
如果interested[other]被修改(变为true),turn还没有改,那么就等待,等待后来的进 
程把turn改变时它(第一个进程)再进入临界区; 
如果都改变了,第一个进程就直接进入临界区,后一个进程就处于等待状态。 
 
 
当然了,这是用忙等来阻塞一个进程的。 
 
 
-- 
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.118.6.141]  

BBS水木清华站∶精华区