resource producer import consumer op link(cc : cap consumer) op slot(item_holder : real) body producer(pnap : int) write("PRODUCER is alive, pnap =", pnap) process produce var cc : cap consumer var item_holder : real, it : real, napping : int receive link(cc) do true -> it := random() writes("age=", age(), ", PRODUCER produced item ", it, "\n") receive slot(item_holder) item_holder := it send cc.slot(item_holder) napping := int(random(1000*pnap)) writes("age=", age(), ", PRODUCER deposited item ", it, " and napping for ", napping, "ms\n") nap(napping) od end produce end producer resource consumer import producer op link(pc : cap producer) op slot(item_holder : real) body consumer(cnap : int) write("consumer is alive, cnap =", cnap) process consume var pc : cap producer var item_holder : real, it : real, napping : int receive link(pc) do true -> writes("age=", age(), ", consumer wants to consume ...\n") receive slot(item_holder) it := item_holder item_holder := 0 send pc.slot(item_holder) napping := int(random(1000*cnap)) writes("age=", age(), ", consumer fetched item ", it, " and napping for ", napping, "ms\n") nap(napping) od end consume end consumer resource user() import producer, consumer var slots : int := 20, pnap : int := 3 var cnap : int := 5, run_time : int := 60 var pc : cap producer, cc : cap consumer var empty_item : real := 0 getarg(1, slots); getarg(2, pnap); getarg(3, cnap); getarg(4, run_time) writes("main user resource alive, slots = ", slots, ", pnap = ", pnap, ", cnap = ", cnap, ", run_time = ", run_time, "\n") pc := create producer(pnap); cc := create consumer(cnap) send pc.link(cc); send cc.link(pc) fa i := 1 to slots -> send pc.slot(empty_item) af nap(1000*run_time); write("must stop now"); stop end user /* ............... Example compile and run(s) % sr -o mp_bounded_buffer mp_bounded_buffer.sr % ./mp_bounded_buffer 5 2 5 30 main user resource alive, slots = 5, pnap = 2, cnap = 5, run_time = 30 PRODUCER is alive, pnap = 2 consumer is alive, cnap = 5 age=72, PRODUCER produced item 0.994389 age=79, consumer wants to consume ... age=84, PRODUCER deposited item 0.994389 and napping for 853ms age=89, consumer fetched item 0.994389 and napping for 910ms age=943, PRODUCER produced item 0.573679 age=946, PRODUCER deposited item 0.573679 and napping for 1604ms age=1003, consumer wants to consume ... age=1005, consumer fetched item 0.573679 and napping for 787ms age=1803, consumer wants to consume ... age=2553, PRODUCER produced item 0.519427 age=2556, PRODUCER deposited item 0.519427 and napping for 1396ms age=2559, consumer fetched item 0.519427 and napping for 1332ms age=3903, consumer wants to consume ... age=3963, PRODUCER produced item 0.715470 age=3966, PRODUCER deposited item 0.715470 and napping for 66ms age=3969, consumer fetched item 0.715470 and napping for 3824ms age=4043, PRODUCER produced item 0.296578 age=4046, PRODUCER deposited item 0.296578 and napping for 1036ms age=5093, PRODUCER produced item 0.994282 age=5096, PRODUCER deposited item 0.994282 and napping for 954ms age=6053, PRODUCER produced item 0.220615 age=6056, PRODUCER deposited item 0.220615 and napping for 878ms age=6943, PRODUCER produced item 0.883803 age=6945, PRODUCER deposited item 0.883803 and napping for 416ms age=7373, PRODUCER produced item 0.00383435 age=7375, PRODUCER deposited item 0.00383435 and napping for 979ms age=7803, consumer wants to consume ... age=7805, consumer fetched item 0.296578 and napping for 2598ms age=8363, PRODUCER produced item 0.379058 age=8366, PRODUCER deposited item 0.379058 and napping for 738ms age=9113, PRODUCER produced item 0.625593 age=10413, consumer wants to consume ... age=10415, consumer fetched item 0.994282 and napping for 4708ms age=10419, PRODUCER deposited item 0.625593 and napping for 1484ms age=11913, PRODUCER produced item 0.919154 age=15134, consumer wants to consume ... age=15136, consumer fetched item 0.220615 and napping for 455ms age=15139, PRODUCER deposited item 0.919154 and napping for 516ms age=15594, consumer wants to consume ... age=15597, consumer fetched item 0.883803 and napping for 685ms age=15663, PRODUCER produced item 0.399821 age=15665, PRODUCER deposited item 0.399821 and napping for 662ms age=16293, consumer wants to consume ... age=16295, consumer fetched item 0.00383435 and napping for 2179ms age=16333, PRODUCER produced item 0.196439 age=16336, PRODUCER deposited item 0.196439 and napping for 536ms age=16883, PRODUCER produced item 0.531555 age=18483, consumer wants to consume ... age=18486, consumer fetched item 0.379058 and napping for 3924ms age=18489, PRODUCER deposited item 0.531555 and napping for 703ms age=19203, PRODUCER produced item 0.804208 age=22413, consumer wants to consume ... age=22415, consumer fetched item 0.625593 and napping for 4612ms age=22418, PRODUCER deposited item 0.804208 and napping for 1456ms age=23883, PRODUCER produced item 0.276574 age=27033, consumer wants to consume ... age=27036, consumer fetched item 0.919154 and napping for 2792ms age=27039, PRODUCER deposited item 0.276574 and napping for 814ms age=27863, PRODUCER produced item 0.179722 age=29833, consumer wants to consume ... age=29835, consumer fetched item 0.399821 and napping for 2214ms age=29839, PRODUCER deposited item 0.179722 and napping for 1248ms must stop now % ./mp_bounded_buffer 5 5 3 30 main user resource alive, slots = 5, pnap = 5, cnap = 3, run_time = 30 PRODUCER is alive, pnap = 5 consumer is alive, cnap = 3 age=68, PRODUCER produced item 0.596761 age=75, consumer wants to consume ... age=80, PRODUCER deposited item 0.596761 and napping for 1688ms age=83, consumer fetched item 0.596761 and napping for 2695ms age=1780, PRODUCER produced item 0.0321152 age=1784, PRODUCER deposited item 0.0321152 and napping for 246ms age=2040, PRODUCER produced item 0.278040 age=2043, PRODUCER deposited item 0.278040 and napping for 4053ms age=2780, consumer wants to consume ... age=2784, consumer fetched item 0.0321152 and napping for 1526ms age=4320, consumer wants to consume ... age=4322, consumer fetched item 0.278040 and napping for 2861ms age=6100, PRODUCER produced item 0.491518 age=6103, PRODUCER deposited item 0.491518 and napping for 4027ms age=7190, consumer wants to consume ... age=7192, consumer fetched item 0.491518 and napping for 830ms age=8030, consumer wants to consume ... age=10141, PRODUCER produced item 0.242532 age=10143, PRODUCER deposited item 0.242532 and napping for 837ms age=10147, consumer fetched item 0.242532 and napping for 1727ms age=10990, PRODUCER produced item 0.0426650 age=10993, PRODUCER deposited item 0.0426650 and napping for 4000ms age=11880, consumer wants to consume ... age=11883, consumer fetched item 0.0426650 and napping for 1901ms age=13790, consumer wants to consume ... age=15000, PRODUCER produced item 0.524870 age=15003, PRODUCER deposited item 0.524870 and napping for 994ms age=15006, consumer fetched item 0.524870 and napping for 1515ms age=16000, PRODUCER produced item 0.326056 age=16003, PRODUCER deposited item 0.326056 and napping for 69ms age=16080, PRODUCER produced item 0.403719 age=16083, PRODUCER deposited item 0.403719 and napping for 1411ms age=16530, consumer wants to consume ... age=16532, consumer fetched item 0.326056 and napping for 1492ms age=17500, PRODUCER produced item 0.119838 age=17503, PRODUCER deposited item 0.119838 and napping for 1621ms age=18030, consumer wants to consume ... age=18032, consumer fetched item 0.403719 and napping for 806ms age=18850, consumer wants to consume ... age=18852, consumer fetched item 0.119838 and napping for 2515ms age=19131, PRODUCER produced item 0.278831 age=19134, PRODUCER deposited item 0.278831 and napping for 3640ms age=21370, consumer wants to consume ... age=21372, consumer fetched item 0.278831 and napping for 482ms age=21860, consumer wants to consume ... age=22780, PRODUCER produced item 0.216591 age=22783, PRODUCER deposited item 0.216591 and napping for 1840ms age=22786, consumer fetched item 0.216591 and napping for 503ms age=23301, consumer wants to consume ... age=24630, PRODUCER produced item 0.208260 age=24633, PRODUCER deposited item 0.208260 and napping for 4563ms age=24636, consumer fetched item 0.208260 and napping for 1599ms age=26240, consumer wants to consume ... age=29200, PRODUCER produced item 0.273633 age=29203, PRODUCER deposited item 0.273633 and napping for 4095ms age=29206, consumer fetched item 0.273633 and napping for 2958ms must stop now */