Void P0( oVoid P1o ●Flag|0=-1; ●Ilag[1=-1; Sign=l gn=l9 o While (flagll&& wHile Sign ) ●/临界区 (flagon&&sign==0) ●/临界区 ●Flag|0=0; ●Ilag[1=0;
⚫ Void P0 ( ) ⚫ {…… ⚫ Flag[0]=-1; ⚫ Sign=1; ⚫ While (flag[1]&& ⚫ sign==1); ⚫ /*临界区*/ ⚫ Flag[0]=0; ⚫ …… ⚫ } ⚫Void P1 ( ) ⚫{…… ⚫Flag[1]=-1; ⚫Sign=1; ⚫While (flag[0]&&sign==0); ⚫/*临界区*/ ⚫Flag[1]=0; ⚫…… ⚫}
3、互斥(用硬件支持的方法) ●1)中断禁用(即在临界区段前后加上禁止和 启用中断就可以了) ●这种方式简单易实现,但是处理却被限制成只 能交替执行程序,降低了执行的效率。而且在 多处理器的系统中却是无法保证诸进程在其他 处理器上的互斥执行了。 2)专门的机器指令 test和set指令 exchange指令 可能会产生饿死、死锁现象
3、互斥(用硬件支持的方法) ⚫ 1)中断禁用(即在临界区段前后加上禁止和 启用中断就可以了) ⚫ 这种方式简单易实现,但是处理却被限制成只 能交替执行程序,降低了执行的效率。而且在 多处理器的系统中却是无法保证诸进程在其他 处理器上的互斥执行了。 ⚫ 2)专门的机器指令 ⚫ test和set 指令 ⚫ exchange指令 可能会产生饿死、死锁现象
Test和set指令 些 o Boolean testset(int bolt o if (bolt==0)i bolt; return ture else return false
Test和set指令 ⚫ Boolean testset(int bolt) ⚫ { if (bolt==0) { bolt; return ture; } ⚫ else return false; ⚫ }
Const int N=进程数 ● Int bolt=0; ● oid maine0 i parbegin(P(1),P()., PN) Void p(int i) o While ( Testset(bolt)); ●/临界区 ●Bot=0 ●。●●。●
⚫ Const int N=进程数 ⚫ Int bolt=0; ⚫ Void main() ⚫ { parbegin (P(1),P(2),……,P(N)); } ⚫ Void P(int I) ⚫ {…… ⚫ While (! Testset(bolt)); ⚫ /*临界区*/ ⚫ Bolt=0; ⚫ …… ⚫ }
Exchange指令 o Void exchange (int reg, int mem) ●{ int temp; temp=mem; mem-reg; reg=temp;
Exchange指令 ⚫ Void exchange (int reg,int mem) ⚫ { int temp; ⚫ temp=mem;mem=reg;reg=temp; ⚫ }