previous up next
Go backward to System Invariants
Go up to Top
Go forward to Reliability of the Solution
RISC-Linz logo

Server Program

Server(server, client):
   var count := R, wait[.] := false
   loop
      var i := select(server)
      if receive(server[i]) = request then
         if count > 0 then
            send(client[i], grant)
            count := count-1
         else
            wait[i] := true
      else // release received
         if exists j in [1,C]: wait[j] then
            take j in [1,C] such that wait[j]
            send(client[j], grant)
            wait[j] := false
         else
            count := count+1
      end
   end
Server(server, client, count, wait) :<=>
   exists i in [1,C]:
      or
         receivei(server, request)  /\ count > 0  /\ 
            sendi(client, grant)  /\ count' = count-1  /\ 
            changed(server, client, count)
         receivei(server, request)  /\   count > 0  /\ 
            wait' = wait[i |-> true]  /\ 
            changed(server, wait)
         receivei(server, release)  /\ exists j: (wait[j]  /\ 
            sendj(client, grant)  /\ wait' = wait[j |-> true])  /\ 
            changed(server, client, wait)
         receivei(server, release)  /\   exists j: wait[j]  /\ 
            count' = count+1  /\ 
            changed(server, count)

Author: Wolfgang Schreiner
Last Modification: April 22, 1999

previous up next