/*#SDTREF(SDL,C:\temp\LAB8Concurency3\Concuro.ssy,4)*/ system Concuro; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\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,C:\temp\LAB8Concurency3\Concuro.ssy(1),140(130,72))*/ channel /*#E*/ ProducerDongle from /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Concuro.ssy(1),134(130,30))*/ Producers to /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Concuro.ssy(1),119(110,100))*/ ConcuroBlock with /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Concuro.ssy(1),141(135,85))*/ requestWrite; from /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Concuro.ssy(1),119(110,100))*/ ConcuroBlock to /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Concuro.ssy(1),134(130,30))*/ Producers with /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Concuro.ssy(1),142(135,60))*/ approveWrite; endchannel ProducerDongle; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Concuro.ssy(1),122(45,102))*/ channel /*#E*/ ThisWayOrTheHighway from /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Concuro.ssy(1),119(110,100))*/ ConcuroBlock to /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Concuro.ssy(1),104(15,15))*/ env with /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Concuro.ssy(1),123(39,112))*/ consumerXReadItemY, producerXWroteItemY; endchannel ThisWayOrTheHighway; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Concuro.ssy(1),149(132,152))*/ channel /*#E*/ ConsumerDongle from /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Concuro.ssy(1),137(130,185))*/ Consumers to /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Concuro.ssy(1),119(110,100))*/ ConcuroBlock with /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Concuro.ssy(1),150(135,130))*/ requestRead; from /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Concuro.ssy(1),119(110,100))*/ ConcuroBlock to /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Concuro.ssy(1),137(130,185))*/ Consumers with /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Concuro.ssy(1),151(135,170))*/ approveRead; endchannel ConsumerDongle; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Concuro.ssy(1),134(130,30))*/ block /*#E*/ Producers referenced; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Concuro.ssy(1),119(110,100))*/ block /*#E*/ ConcuroBlock referenced; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Concuro.ssy(1),137(130,185))*/ block /*#E*/ Consumers referenced; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Concuro.ssy,4)*/ endsystem Concuro; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\ConcuroBlock.sbk,4)*/ block ConcuroBlock; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\ConcuroBlock.sbk(1),197(95,47))*/ signalroute /*#E*/ ProduceMe from /*#SDTREF(SDL,C:\temp\LAB8Concurency3\ConcuroBlock.sbk(1),185(70,95))*/ Io to /*#SDTREF(SDL,C:\temp\LAB8Concurency3\ConcuroBlock.sbk(1),104(15,15))*/ env with /*#SDTREF(SDL,C:\temp\LAB8Concurency3\ConcuroBlock.sbk(1),198(95,17))*/ approveWrite; from /*#SDTREF(SDL,C:\temp\LAB8Concurency3\ConcuroBlock.sbk(1),104(15,15))*/ env to /*#SDTREF(SDL,C:\temp\LAB8Concurency3\ConcuroBlock.sbk(1),185(70,95))*/ Io with /*#SDTREF(SDL,C:\temp\LAB8Concurency3\ConcuroBlock.sbk(1),199(95,90))*/ requestWrite; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\ConcuroBlock.sbk(1),188(45,97))*/ signalroute /*#E*/ LineOut from /*#SDTREF(SDL,C:\temp\LAB8Concurency3\ConcuroBlock.sbk(1),185(70,95))*/ Io to /*#SDTREF(SDL,C:\temp\LAB8Concurency3\ConcuroBlock.sbk(1),104(15,15))*/ env with /*#SDTREF(SDL,C:\temp\LAB8Concurency3\ConcuroBlock.sbk(1),189(17,107))*/ consumerXReadItemY, producerXWroteItemY; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\ConcuroBlock.sbk(1),206(92,157))*/ signalroute /*#E*/ ConsumeMe from /*#SDTREF(SDL,C:\temp\LAB8Concurency3\ConcuroBlock.sbk(1),185(70,95))*/ Io to /*#SDTREF(SDL,C:\temp\LAB8Concurency3\ConcuroBlock.sbk(1),104(15,15))*/ env with /*#SDTREF(SDL,C:\temp\LAB8Concurency3\ConcuroBlock.sbk(1),207(92,207))*/ approveRead; from /*#SDTREF(SDL,C:\temp\LAB8Concurency3\ConcuroBlock.sbk(1),104(15,15))*/ env to /*#SDTREF(SDL,C:\temp\LAB8Concurency3\ConcuroBlock.sbk(1),185(70,95))*/ Io with /*#SDTREF(SDL,C:\temp\LAB8Concurency3\ConcuroBlock.sbk(1),208(92,117))*/ requestRead; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\ConcuroBlock.sbk(1),185(70,95))*/ process /*#E*/ Io referenced; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\ConcuroBlock.sbk(1),203(90,7))*/ connect /*#E*/ ProducerDongle and /*#SDTREF(SDL,C:\temp\LAB8Concurency3\ConcuroBlock.sbk(1),197(95,47))*/ ProduceMe; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\ConcuroBlock.sbk(1),194(5,115))*/ connect /*#E*/ ThisWayOrTheHighway and /*#SDTREF(SDL,C:\temp\LAB8Concurency3\ConcuroBlock.sbk(1),188(45,97))*/ LineOut; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\ConcuroBlock.sbk(1),212(87,217))*/ connect /*#E*/ ConsumerDongle and /*#SDTREF(SDL,C:\temp\LAB8Concurency3\ConcuroBlock.sbk(1),206(92,157))*/ ConsumeMe; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\ConcuroBlock.sbk,4)*/ endblock ConcuroBlock; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Io.spr,4)*/ process Io; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Io.spr(1),119(130,15))*/ DCL numberWritten Integer, writeID Integer, writePID PId, readID Integer, readPID PId; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Io.spr(1),116(60,20))*/ start /*#E*/ ; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Io.spr(1),122(60,35))*/ nextstate /*#E*/ Phase1; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Io.spr(1),122(60,35))*/ state /*#E*/ Phase1; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Io.spr(1),128(30,50))*/ input /*#E*/ requestWrite(numberWritten,WriteID,writePID); /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Io.spr(1),137(30,70))*/ output /*#E*/ producerXWroteItemY(1,numberWritten); /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Io.spr(1),182(55,85))*/ output /*#E*/ approveWrite TO writePID; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Io.spr(1),134(60,110))*/ nextstate /*#E*/ Phase2; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Io.spr(1),155(125,65))*/ save /*#E*/ requestRead; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Io.spr(1),122(60,35))*/ endstate; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Io.spr(1),134(60,110))*/ state /*#E*/ Phase2; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Io.spr(1),161(120,130))*/ save /*#E*/ requestWrite; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Io.spr(1),146(35,135))*/ input /*#E*/ requestRead(readID,readPID); /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Io.spr(1),170(30,155))*/ output /*#E*/ consumerXReadItemY(readID,numberWritten); /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Io.spr(1),191(40,170))*/ output /*#E*/ approveRead(numberWritten) TO readPID; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Io.spr(1),176(60,190))*/ nextstate /*#E*/ Phase1; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Io.spr(1),134(60,110))*/ endstate; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Io.spr,4)*/ endprocess Io; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Producers.sbk,4)*/ block Producers; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Producers.sbk(1),119(42,42))*/ signalroute /*#E*/ ProducerLine1 from /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Producers.sbk(1),116(95,35))*/ Producer to /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Producers.sbk(1),104(15,15))*/ env with /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Producers.sbk(1),120(17,52))*/ requestWrite; from /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Producers.sbk(1),104(15,15))*/ env to /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Producers.sbk(1),116(95,35))*/ Producer with /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Producers.sbk(1),121(82,55))*/ approveWrite; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Producers.sbk(1),116(95,35))*/ process /*#E*/ Producer referenced; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Producers.sbk(1),125(2,42))*/ connect /*#E*/ ProducerDongle and /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Producers.sbk(1),119(42,42))*/ ProducerLine1; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Producers.sbk,4)*/ endblock Producers; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Producer.spr,4)*/ process Producer; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\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,C:\temp\LAB8Concurency3\Producer.spr(1),119(65,15))*/ start /*#E*/ ; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Producer.spr(1),125(45,40))*/ task {/*#E*/ myID:=1; numberToWrite:=7; someTime:=1000; mahPID:=SELF; SET(NOW+someTime,walkingTime);}; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Producer.spr(1),134(65,70))*/ nextstate /*#E*/ SiDLing; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Producer.spr(1),134(65,70))*/ state /*#E*/ SiDLing; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Producer.spr(1),143(60,90))*/ input /*#E*/ walkingTime; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Producer.spr(1),149(35,110))*/ output /*#E*/ requestWrite(myID,numberToWrite,mahPID); /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Producer.spr(1),167(60,125))*/ nextstate /*#E*/ ForcedToWait; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Producer.spr(1),134(65,70))*/ endstate; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Producer.spr(1),167(60,125))*/ state /*#E*/ ForcedToWait; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Producer.spr(1),158(60,140))*/ input /*#E*/ approveWrite; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Producer.spr(1),179(45,160))*/ task {/*#E*/ numberToWrite:=any(iLikeToWrite); someTime:=any(babaAuRum); SET(NOW+someTime,walkingTime);}; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Producer.spr(1),176(65,185))*/ nextstate /*#E*/ SiDLing; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Producer.spr(1),167(60,125))*/ endstate; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Producer.spr,4)*/ endprocess Producer; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Consumers.sbk,4)*/ block Consumers; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Consumers.sbk(1),119(37,50))*/ signalroute /*#E*/ ConsumerLine1 from /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Consumers.sbk(1),116(85,50))*/ Consumer to /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Consumers.sbk(1),104(15,15))*/ env with /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Consumers.sbk(1),120(17,60))*/ requestRead; from /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Consumers.sbk(1),104(15,15))*/ env to /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Consumers.sbk(1),116(85,50))*/ Consumer with /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Consumers.sbk(1),121(62,60))*/ approveRead; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Consumers.sbk(1),116(85,50))*/ process /*#E*/ Consumer referenced; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Consumers.sbk(1),125(5,65))*/ connect /*#E*/ ConsumerDongle and /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Consumers.sbk(1),119(37,50))*/ ConsumerLine1; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Consumers.sbk,4)*/ endblock Consumers; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Consumer.spr,4)*/ process Consumer; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Consumer.spr(1),125(145,15))*/ TIMER coolTimes; DCL theseTimes DURATION, stuffRead Integer, myID Integer, mahPID PId; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Consumer.spr(1),119(65,20))*/ start /*#E*/ ; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Consumer.spr(1),122(45,40))*/ task {/*#E*/ mahPID:=SELF; stuffRead:=0; myID:=1; theseTimes:=1000; set(NOW+theseTimes, coolTimes);}; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Consumer.spr(1),131(65,75))*/ nextstate /*#E*/ SiDLing; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Consumer.spr(1),131(65,75))*/ state /*#E*/ SiDLing; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Consumer.spr(1),137(65,95))*/ input /*#E*/ coolTimes; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Consumer.spr(1),143(50,115))*/ output /*#E*/ requestRead(myID,mahPID); /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Consumer.spr(1),149(65,135))*/ nextstate /*#E*/ ForcedWait; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Consumer.spr(1),131(65,75))*/ endstate; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Consumer.spr(1),149(65,135))*/ state /*#E*/ ForcedWait; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Consumer.spr(1),155(50,155))*/ input /*#E*/ approveRead(stuffRead); /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Consumer.spr(1),167(45,175))*/ task {/*#E*/ set(NOW+theseTimes, coolTimes);}; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Consumer.spr(1),173(65,200))*/ nextstate /*#E*/ SiDLing; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Consumer.spr(1),149(65,135))*/ endstate; /*#SDTREF(SDL,C:\temp\LAB8Concurency3\Consumer.spr,4)*/ endprocess Consumer;