/*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Concuro.ssy,4)*/ system Concuro; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Concuro.ssy(1),179(20,175))*/ SIGNAL requestWrite(Integer,Integer,PId), approveWrite, requestRead(Integer,PId), approveRead(Integer), consumerXReadItemY(Integer,Integer), producerXWroteItemY(Integer,Integer); /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Concuro.ssy(1),140(130,72))*/ channel /*#E*/ ProducerDongle from /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Concuro.ssy(1),134(130,30))*/ Producers to /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Concuro.ssy(1),119(110,100))*/ ConcuroBlock with /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Concuro.ssy(1),141(135,85))*/ requestWrite; from /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Concuro.ssy(1),119(110,100))*/ ConcuroBlock to /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Concuro.ssy(1),134(130,30))*/ Producers with /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Concuro.ssy(1),142(135,60))*/ approveWrite; endchannel ProducerDongle; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Concuro.ssy(1),122(45,102))*/ channel /*#E*/ ThisWayOrTheHighway from /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Concuro.ssy(1),119(110,100))*/ ConcuroBlock to /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Concuro.ssy(1),104(15,15))*/ env with /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Concuro.ssy(1),123(39,112))*/ consumerXReadItemY, producerXWroteItemY; endchannel ThisWayOrTheHighway; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Concuro.ssy(1),149(132,152))*/ channel /*#E*/ ConsumerDongle from /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Concuro.ssy(1),137(130,185))*/ Consumers to /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Concuro.ssy(1),119(110,100))*/ ConcuroBlock with /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Concuro.ssy(1),150(135,130))*/ requestRead; from /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Concuro.ssy(1),119(110,100))*/ ConcuroBlock to /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Concuro.ssy(1),137(130,185))*/ Consumers with /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Concuro.ssy(1),151(135,170))*/ approveRead; endchannel ConsumerDongle; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Concuro.ssy(1),134(130,30))*/ block /*#E*/ Producers referenced; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Concuro.ssy(1),119(110,100))*/ block /*#E*/ ConcuroBlock referenced; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Concuro.ssy(1),137(130,185))*/ block /*#E*/ Consumers referenced; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Concuro.ssy,4)*/ endsystem Concuro; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producers.sbk,4)*/ block Producers; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producers.sbk(1),119(42,42))*/ signalroute /*#E*/ ProducerLine1 from /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producers.sbk(1),116(95,35))*/ Producer to /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producers.sbk(1),104(15,15))*/ env with /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producers.sbk(1),120(17,52))*/ requestWrite; from /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producers.sbk(1),104(15,15))*/ env to /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producers.sbk(1),116(95,35))*/ Producer with /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producers.sbk(1),121(82,55))*/ approveWrite; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producers.sbk(1),167(45,75))*/ signalroute /*#E*/ ProducerLine2 from /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producers.sbk(1),161(95,75))*/ Producer2 to /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producers.sbk(1),104(15,15))*/ env with /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producers.sbk(1),168(17,85))*/ requestWrite; from /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producers.sbk(1),104(15,15))*/ env to /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producers.sbk(1),161(95,75))*/ Producer2 with /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producers.sbk(1),169(75,85))*/ approveWrite; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producers.sbk(1),116(95,35))*/ process /*#E*/ Producer referenced; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producers.sbk(1),161(95,75))*/ process /*#E*/ Producer2 referenced; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producers.sbk(1),125(2,42))*/ connect /*#E*/ ProducerDongle and /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producers.sbk(1),119(42,42))*/ ProducerLine1; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producers.sbk(1),173(0,75))*/ connect /*#E*/ ProducerDongl and /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producers.sbk(1),167(45,75))*/ ProducerLine2; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producers.sbk,4)*/ endblock Producers; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer.spr,4)*/ process Producer; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer.spr(1),128(135,15))*/ TIMER walkingTime; DCL someTime DURATION, myID Integer, numberToWrite Integer, mahPID PId; syntype iLikeToWrite = Integer constants 0:100 endsyntype; syntype babaAuRum = DURATION constants 500:3000 endsyntype; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer.spr(1),119(65,15))*/ start /*#E*/ ; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer.spr(1),125(45,40))*/ task {/*#E*/ myID:=1; numberToWrite:=any(iLikeToWrite); someTime:=any(babaAuRum); mahPID:=SELF; SET(NOW+someTime,walkingTime);}; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer.spr(1),134(65,70))*/ nextstate /*#E*/ SiDLing; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer.spr(1),134(65,70))*/ state /*#E*/ SiDLing; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer.spr(1),143(60,90))*/ input /*#E*/ walkingTime; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer.spr(1),149(35,110))*/ output /*#E*/ requestWrite(myID,numberToWrite,mahPID); /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer.spr(1),167(60,125))*/ nextstate /*#E*/ ForcedToWait; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer.spr(1),134(65,70))*/ endstate; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer.spr(1),167(60,125))*/ state /*#E*/ ForcedToWait; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer.spr(1),158(60,140))*/ input /*#E*/ approveWrite; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer.spr(1),179(45,160))*/ task {/*#E*/ numberToWrite:=any(iLikeToWrite); someTime:=any(babaAuRum); SET(NOW+someTime,walkingTime);}; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer.spr(1),176(65,185))*/ nextstate /*#E*/ SiDLing; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer.spr(1),167(60,125))*/ endstate; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer.spr,4)*/ endprocess Producer; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer2.spr,4)*/ process Producer2; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer2.spr(1),116(125,10))*/ TIMER walkingTime; DCL someTime DURATION, myID Integer, numberToWrite Integer, mahPID PId; syntype iLikeToWrite = Integer constants 0:100 endsyntype; syntype babaAuRum = DURATION constants 500:3000 endsyntype; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer2.spr(1),143(55,10))*/ start /*#E*/ ; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer2.spr(1),140(35,35))*/ task {/*#E*/ myID:=2; numberToWrite:=any(iLikeToWrite); someTime:=any(babaAuRum); mahPID:=SELF; SET(NOW+someTime,walkingTime);}; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer2.spr(1),137(55,65))*/ nextstate /*#E*/ SiDLing; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer2.spr(1),137(55,65))*/ state /*#E*/ SiDLing; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer2.spr(1),134(50,85))*/ input /*#E*/ walkingTime; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer2.spr(1),131(25,105))*/ output /*#E*/ requestWrite(myID,numberToWrite,mahPID); /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer2.spr(1),128(50,120))*/ nextstate /*#E*/ ForcedToWait; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer2.spr(1),137(55,65))*/ endstate; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer2.spr(1),128(50,120))*/ state /*#E*/ ForcedToWait; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer2.spr(1),125(50,135))*/ input /*#E*/ approveWrite; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer2.spr(1),122(35,155))*/ task {/*#E*/ numberToWrite:=any(iLikeToWrite); someTime:=any(babaAuRum); SET(NOW+someTime,walkingTime);}; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer2.spr(1),119(55,180))*/ nextstate /*#E*/ SiDLing; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer2.spr(1),128(50,120))*/ endstate; /*#SDTREF(SDL,H:\SEG2106\LAB8Concurency\Producer2.spr,4)*/ endprocess Producer2;