729 一临界区:不允许多个并发进程交又执行的一段程序 Pr。 cess E1 Process P2 process lt begin w chin getchar oi chin getchar o Remainder of process 1: Goto LI 跳 chou=chin chin putchar(chou L2: C putchar(chou) Remainder of process 2: Goto L2 coend 互斥 互斥的软件实现 不允许两个以上的共事该资源的并 进程P,P共享临界资源R。Turn进程编号 发进程同时进入临界区称为互斥 算法1:共享一个公用整型变量 临界区调度原则 空闲让进 E while turn ei do no 忙则等待 有限等待 系统|程的同步 critical section 让权等待 remainder sectio 3→算法2:用数组代替算法一中的um var flag array [0... n of boolean=flase; 算法3 while flaglil do no op flag i: true critical section 作系统|进程的 fagi: =true while flagljl do no op; fagi: false remainder section remainder section until false;2 操 作 系 统 | 进 程 的 同 步 与 通 信 7 CUIT 徐虹 Process P1 Process P2 . . chin = getchar(); . . chin = getchar(); chout = chin; . chout = chin; putchar(chout); . . putchar(chout); . . 操 作 系 统 | 进 程 的 同 步 与 通 信 8 CUIT 徐虹 ¾临界区:不允许多个并发进程交叉执行的一段程序。 cobegin process 1: begin L1:CS1; Remainder of process 1; Goto L1; end process 2:begin L2:CS2; Remainder of process 2; Goto L2; end coend 操 作 系 统 | 进 程 的 同 步 与 通 信 9 CUIT 徐虹 ¾互斥 ¾不允许两个以上的共享该资源的并 发进程同时进入临界区称为互斥。 ¾临界区调度原则 ¾空闲让进 ¾忙则等待 ¾有限等待 ¾让权等待 操 作 系 统 | 进 程 的 同 步 与 通 信 10 CUIT 徐虹 ¾互斥的软件实现 进程Pi,Pj共享临界资源R。Turn:进程编号。 ¾算法1:共享一个公用整型变量turn Pi :repeat while turn <> i do no_op; critical section turn := j; remainder section until false; 操 作 系 统 | 进 程 的 同 步 与 通 信 11 CUIT 徐虹 ¾算法2:用数组代替算法一中的turn var flag : array [0… n] of boolean = flase; repeat while flag[j] do no_op; flag[i] := true ; critical section flag[i] := false ; remainder section until false ; 操 作 系 统 | 进 程 的 同 步 与 通 信 12 CUIT 徐虹 ¾算法3: repeat flag[i] : = true ; while flag[j] do no_op; critical section flag[i] := false ; remainder section until false ;