算法5:对临界区S设置个变量状态W 算法4进程共享两个公用变量 W=0表示资源可用,W=1表示资源已被占用 N flag]: =true It lock W: CSI: Unlock w Remainder of process 1: while flaglil and turn=j)do no op: Goto LI fagi: =false remainder section until false 的同步与通信4 L2: lock W: CS2: Unlock w 关锁原语 开锁原语 lock WI if w=1 then unlock w if WLo NULL then begin block(n); remove(WL, q): insert(WL, n); q)=“ ready”; 的同步 insert(RL, ) 硬件实现进程互斥 利用 Test and set指令 利用TS指令实现互斥 begin while Ts (lock) do skip; TS: = lock critical section Lock:= true 作系统|进程的 maunder section Lock=true:资源被占用 Lock= false:资源可用3 操 作 系 统 | 进 程 的 同 步 与 通 信 13 CUIT 徐虹 ¾算法4:进程共享两个公用变量 Pi: repeat flag[i] : = true ; turn := j ; while ( flag[j] and turn = j ) do no_op; critical section flag[i] := false ; remainder section until false ; 操 作 系 统 | 进 程 的 同 步 与 通 信 14 CUIT 徐虹 ¾算法5:对临界区S设置一个变量状态W, W=0表示资源可用,W=1表示资源已被占用。 例:Begin integer W = 0 ; Cogegin Begin L1:lock W; CS1; Unlock W; Remainder of process 1; Goto L1; End Begin L2:lock W; CS2; Unlock W; Remainder of process 2; Goto L2; End Coend End 操 作 系 统 | 进 程 的 同 步 与 通 信 15 CUIT 徐虹 ¾关锁原语 lock W: if W = 1 then begin block(n); insert(WL,n); scheduler; end else W = 1; 操 作 系 统 | 进 程 的 同 步 与 通 信 16 CUIT 徐虹 ¾开锁原语 unlock W: if WL<> NULL then begin remove(WL,q); status(q) = “ready”; insert(RL,q); end else W = 0; 操 作 系 统 | 进 程 的 同 步 与 通 信 17 CUIT 徐虹 ¾硬件实现进程互斥 ¾利用Test_and_Set 指令 function TS (var lock : boolean ) : boolean ; begin TS := lock ; Lock := true ; End Lock = true :资源被占用 Lock = false :资源可用 操 作 系 统 | 进 程 的 同 步 与 通 信 18 CUIT 徐虹 利用TS指令实现互斥: repeat while TS (lock) do skip ; critical section lock := false ; remainder section until false ;