occam-pi

occam-pi: extended rendezvous


I'd appreciate it if someone could explain the concept of extended rendezvous to me. Thanks.


Solution

  • Extended rendezvous allows you to perform an action after having received a channel communication, but before letting the other process continue.

    
    PROC a(CHAN INT sendtoB, sendtoC):
      SEQ
        -- do some stuff
        ...
        -- communicate with B, this will not complete 
        -- until the extended rendezvous completes
        sendtoB ! 123
        -- do some other stuff before sending info to another process
        ...
        sendtoC ! 345
    :
    
    PROC b(CHAN INT receivefromA):
      INT tmp:
      SEQ
        --do some stuff
        receivefromA ?? tmp
          -- do some stuff before process C gets data from process a
          ...
        -- release the channel and do some other stuff
        ...
    :    
    
    PROC c(CHAN INT receivefromA):
      INT tmp:
      SEQ
        -- This will wait until proc b releases
        receivefromA ? tmp
        -- this will only run after the first communication from A to B completes.
    
    PROC run(CHAN BYTE kyb, scr, err):
      CHAN INT AtoB, AtoC:
      PAR
        a(AtoB, AtoC)
        b(AtoB)
        c(AtoC)
    :