2010-05-19 57 views

回答

2

擴展會合允許您已經接收到信道通信之後執行的操作,而是讓其它進程之前繼續。


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) 
: