●3)第三种尝试 ●/进程0*/ ●0。● ●Fag0=1; ● While(iag|) ●{iag|0}=0 ●体延迟*/; Flago=-1; ●/临界区 ●Flag0|=0:
⚫ 3)第三种尝试 ⚫ /*进程0*/ ⚫ …… ⚫ Flag[0]=-1; ⚫ While (flag[1]) ⚫ {flag[0]=0; ⚫ /*延迟*/; ⚫ Flag[0]=-1; ⚫ } ⚫ /*临界区*/ ⚫ Flag[0]=0; ⚫ ……
●/进程1*/ ●Fag1l=-1 While (flagon ●{iag[l=0; /延迟*; ●Flag1l=-1; ●/临界区 ●Flag[1=0;
⚫ /*进程1*/ ⚫ …… ⚫ Flag[1]=-1; ⚫ While (flag[0]) ⚫ {flag[1]=0; ⚫ /*延迟*/; ⚫ Flag[1]=-1; ⚫ } ⚫ /*临界区*/ ⚫ Flag[1]=0; ⚫ ……
4) Dekker算法 o Int flag2]=(0,0,, sign=1; o Void main( o parbegin(Po(,P,); ●/结构 parbeginl的含义是挂起主程序的执 行,开始并发执行进程P和P1
4)Dekker算法 ⚫ Int flag[2]={0,0},sign=1; ⚫ Void main( ) ⚫ {parbegin (p0 ( ),p1 ( )); ⚫ /*结构parbegin的含义是挂起主程序的执 行,开始并发执行进程P0和P1*/ ⚫ }
oVoid PIo Void Poo ●Flag|0=1; oFlagl=-1; While(flagllD wHile(flagon If(sign==1) oIf(sign==0 Flaga=0 ●{lag[l=0 While(sign==l) wHile(sign==01); ●Flag|0=-1; ●Flag1=-1: ●/临界区 ●/临界区 ●Sign=1; ●Sign=0 ● Flagel0=0: ● Flagel1l=0; }
⚫ Void P 0 ( ) ⚫ {…… ⚫ Flag[0]= -1; ⚫ While(flag[1]) ⚫ If(sign==1) ⚫ {flag[0]=0; ⚫ While(sign==1) ; ⚫ Flag[0]=-1; ⚫ } ⚫ /*临界区*/ ⚫ Sign=1; ⚫ Flage[0]=0; ⚫ …… ⚫ } ⚫Void P 1 ( ) ⚫{…… ⚫Flag[1]= -1; ⚫While(flag[0]) ⚫If(sign==0 ⚫ {flag[1]=0; ⚫While(sign==01) ; ⚫Flag[1]=-1; ⚫} ⚫/*临界区*/ ⚫Sign=0; ⚫Flage[1]=0; ⚫…… ⚫}
Perterson算法 和 Dekker算法 o Int flag2=(0,0,sign; 样,全局数 组变量ag表 o Void main() 示每个进程关 ●{ parbegin(PO(PlO}于互斥的位置, 全局变量sign 解决同进程的 冲突问题,但 是它将对这两 个变量的检测 和放置更有效 结合起来
Perterson算法 ⚫ Int flag[2]={0,0},sign; ⚫ Void main( ) ⚫ { parbegin (P0( ),P1());} 和Dekker算法 一样,全局数 组变量flag表 示每个进程关 于互斥的位置, 全局变量sign 解决同进程的 冲突问题,但 是它将对这两 个变量的检测 和放置更有效 的结合起来