------------------------------------------------------------------------------- Mohamed G. Gouda CS 356 Summer 2005 Homework 1 Solution ------------------------------------------------------------------------------- 1. Process q is the same as the one in the textbook. Process p can be defined as follows: process p var ready : boolean {true, initially} rcvrqst: boolean {false,initially} begin ready -> send rqst to q; ready := false [] rcv rply from q -> if rcvrqst -> send rply to q; rcvrqst:=false [] ~rcvrqst -> skip fi; ready := true [] rcv rqst from q -> if ready -> send rply to q [] ~ready -> rcvrqst:= true fi; end ------------------------------------------------------------------------------- 3. Process p can be defined as follows: process p inp pr : boolean {pr.p = ~pr.q} var ready : boolean {true, initially} rcvrqst: boolean {false,initially} begin ready -> send rqst to q; ready := false [] rcv rply from q -> if rcvrqst -> send rply to q; rcvrqst:=false [] ~rcvrqst -> skip fi; ready := true [] rcv rqst from q -> if ready V ~pr -> send rply to q [] ~ready ^ pr -> rcvrqst:= true fi; end