Go backward to Designing the Server Go up to Top Go forward to Server Model |
Need to be careful on receipt of release messages:
ServerC,R(server, client,
counter, wait) :<=>
exists i in [1,C]:
or
receivei(server, release) /\ exists j in [1,C]: wait[j] /\
count' = count+1 /\
changed(server, count)
receivei(server, release) /\ exists j in [1,C]: (wait[j] /\
sendj(client, grant) /\ wait' = wait[j |-> false])
/\
changed(server, client, wait)
...
Resulting server maintains invariant.