On Tue, May 10, 2016 at 6:31 PM, Vince Refiti <vin...@gmail.com> wrote: > Hello > > I am playing around with Semaphore, and wrote the following:
[snip] > Can someone please explain this pattern? I rearranged again to make the output self explanatory... | coll count sem | Transcript clear; show: 'count' ; tab; show: 'each'. coll := Array withAll: (1 to: 99). count := 0. sem := Semaphore new. coll do: [ :each | count := count + 1. Transcript crShow: count printString; tab. (count >= 5) ifTrue: [ sem isSignaled ifTrue: [ Transcript tab; show: 'consumeExcess, nowait, '. sem wait ] ifFalse: [ Transcript tab; show: 'main/UI waits on sem'. sem wait. Transcript cr; tab; tab; show: 'main/UI runs, excessSignals ' ; show: sem excessSignals printString; cr; tab. ] ]. Transcript tab ; show: each printString, ' queued to run'. [ count := count -1. Transcript crShow: count printString; tab ; tab; show: each printString, ' runs, signals sem'. sem signal. sem isSignaled ifFalse: [ Transcript show: ', UI queued to run' ]. ] fork. ] On Tue, May 10, 2016 at 6:31 PM, Vince Refiti <vin...@gmail.com> wrote: > Hello > > I am playing around with Semaphore, and wrote the following: [snip] > Can someone please explain this pattern? I rearranged again to make the output self explanatory... | coll count sem | Transcript clear; show: 'count' ; tab; show: 'each'. coll := Array withAll: (1 to: 99). count := 0. sem := Semaphore new. coll do: [ :each | count := count + 1. Transcript crShow: count printString; tab. (count >= 5) ifTrue: [ sem isSignaled ifTrue: [ Transcript tab; show: 'nowait '. sem wait ] ifFalse: [ Transcript tab; show: 'main/UI waits on sem'. sem wait. Transcript cr; tab; tab; show: 'main/UI runs, excessSignals ' ; show: sem excessSignals printString; cr; tab. ] ]. Transcript tab ; show: each printString, ' queued to run'. [ count := count -1. Transcript crShow: count printString; tab ; tab; show: each printString, ' runs, signals sem'. sem signal. sem isSignaled ifFalse: [ Transcript show: ', main/UI queued to run' ]. ] fork. ] count each 1 1 queued to run 2 2 queued to run 3 3 queued to run 4 4 queued to run 5 main/UI waits on sem 4 1 runs, signals sem, main/UI queued to run 3 2 runs, signals sem 2 3 runs, signals sem 1 4 runs, signals sem main/UI runs, excessSignals 3 5 queued to run 2 6 queued to run 3 7 queued to run 4 8 queued to run 5 consumeExcess, nowait, 9 queued to run 6 consumeExcess, nowait, 10 queued to run 7 consumeExcess, nowait, 11 queued to run 8 main/UI waits on sem 7 5 runs, signals sem, main/UI queued to run 6 6 runs, signals sem 5 7 runs, signals sem 4 8 runs, signals sem 3 9 runs, signals sem 2 10 runs, signals sem 1 11 runs, signals sem main/UI runs, excessSignals 6 12 queued to run 2 13 queued to run 3 14 queued to run 4 15 queued to run 5 consumeExcess, nowait, 16 queued to run 6 consumeExcess, nowait, 17 queued to run 7 consumeExcess, nowait, 18 queued to run 8 consumeExcess, nowait, 19 queued to run 9 consumeExcess, nowait, 20 queued to run 10 consumeExcess, nowait, 21 queued to run 11 main/UI waits on sem 10 12 runs, signals sem, main/UI queued to run 9 13 runs, signals sem 8 14 runs, signals sem 7 15 runs, signals sem 6 16 runs, signals sem 5 17 runs, signals sem 4 18 runs, signals sem 3 19 runs, signals sem 2 20 runs, signals sem 1 21 runs, signals sem main/UI runs, excessSignals 9 22 queued to run 2 23 queued to run 3 24 queued to run 4 25 queued to run 5 consumeExcess, nowait, 26 queued to run 6 consumeExcess, nowait, 27 queued to run 7 consumeExcess, nowait, 28 queued to run 8 consumeExcess, nowait, 29 queued to run 9 consumeExcess, nowait, 30 queued to run 10 consumeExcess, nowait, 31 queued to run 11 consumeExcess, nowait, 32 queued to run 12 consumeExcess, nowait, 33 queued to run 13 consumeExcess, nowait, 34 queued to run 14 main/UI waits on sem 13 22 runs, signals sem, main/UI queued to run 12 23 runs, signals sem 11 24 runs, signals sem 10 25 runs, signals sem 9 26 runs, signals sem 8 27 runs, signals sem 7 28 runs, signals sem 6 29 runs, signals sem 5 30 runs, signals sem 4 31 runs, signals sem 3 32 runs, signals sem 2 33 runs, signals sem 1 34 runs, signals sem main/UI runs, excessSignals 12 35 queued to run 2 36 queued to run 3 37 queued to run 4 38 queued to run 5 consumeExcess, nowait, 39 queued to run 6 consumeExcess, nowait, 40 queued to run 7 consumeExcess, nowait, 41 queued to run 8 consumeExcess, nowait, 42 queued to run 9 consumeExcess, nowait, 43 queued to run 10 consumeExcess, nowait, 44 queued to run 11 consumeExcess, nowait, 45 queued to run 12 consumeExcess, nowait, 46 queued to run 13 consumeExcess, nowait, 47 queued to run 14 consumeExcess, nowait, 48 queued to run 15 consumeExcess, nowait, 49 queued to run 16 consumeExcess, nowait, 50 queued to run 17 main/UI waits on sem 16 35 runs, signals sem, main/UI queued to run 15 36 runs, signals sem 14 37 runs, signals sem 13 38 runs, signals sem 12 39 runs, signals sem 11 40 runs, signals sem 10 41 runs, signals sem 9 42 runs, signals sem 8 43 runs, signals sem 7 44 runs, signals sem 6 45 runs, signals sem 5 46 runs, signals sem 4 47 runs, signals sem 3 48 runs, signals sem 2 49 runs, signals sem 1 50 runs, signals sem main/UI runs, excessSignals 15 51 queued to run 2 52 queued to run 3 53 queued to run 4 54 queued to run 5 consumeExcess, nowait, 55 queued to run 6 consumeExcess, nowait, 56 queued to run 7 consumeExcess, nowait, 57 queued to run 8 consumeExcess, nowait, 58 queued to run 9 consumeExcess, nowait, 59 queued to run 10 consumeExcess, nowait, 60 queued to run 11 consumeExcess, nowait, 61 queued to run 12 consumeExcess, nowait, 62 queued to run 13 consumeExcess, nowait, 63 queued to run 14 consumeExcess, nowait, 64 queued to run 15 consumeExcess, nowait, 65 queued to run 16 consumeExcess, nowait, 66 queued to run 17 consumeExcess, nowait, 67 queued to run 18 consumeExcess, nowait, 68 queued to run 19 consumeExcess, nowait, 69 queued to run 20 main/UI waits on sem 19 51 runs, signals sem, main/UI queued to run 18 52 runs, signals sem 17 53 runs, signals sem 16 54 runs, signals sem 15 55 runs, signals sem 14 56 runs, signals sem 13 57 runs, signals sem 12 58 runs, signals sem 11 59 runs, signals sem 10 60 runs, signals sem 9 61 runs, signals sem 8 62 runs, signals sem 7 63 runs, signals sem 6 64 runs, signals sem 5 65 runs, signals sem 4 66 runs, signals sem 3 67 runs, signals sem 2 68 runs, signals sem 1 69 runs, signals sem main/UI runs, excessSignals 18 70 queued to run 2 71 queued to run 3 72 queued to run 4 73 queued to run 5 consumeExcess, nowait, 74 queued to run 6 consumeExcess, nowait, 75 queued to run 7 consumeExcess, nowait, 76 queued to run 8 consumeExcess, nowait, 77 queued to run 9 consumeExcess, nowait, 78 queued to run 10 consumeExcess, nowait, 79 queued to run 11 consumeExcess, nowait, 80 queued to run 12 consumeExcess, nowait, 81 queued to run 13 consumeExcess, nowait, 82 queued to run 14 consumeExcess, nowait, 83 queued to run 15 consumeExcess, nowait, 84 queued to run 16 consumeExcess, nowait, 85 queued to run 17 consumeExcess, nowait, 86 queued to run 18 consumeExcess, nowait, 87 queued to run 19 consumeExcess, nowait, 88 queued to run 20 consumeExcess, nowait, 89 queued to run 21 consumeExcess, nowait, 90 queued to run 22 consumeExcess, nowait, 91 queued to run 23 main/UI waits on sem 22 70 runs, signals sem, main/UI queued to run 21 71 runs, signals sem 20 72 runs, signals sem 19 73 runs, signals sem 18 74 runs, signals sem 17 75 runs, signals sem 16 76 runs, signals sem 15 77 runs, signals sem 14 78 runs, signals sem 13 79 runs, signals sem 12 80 runs, signals sem 11 81 runs, signals sem 10 82 runs, signals sem 9 83 runs, signals sem 8 84 runs, signals sem 7 85 runs, signals sem 6 86 runs, signals sem 5 87 runs, signals sem 4 88 runs, signals sem 3 89 runs, signals sem 2 90 runs, signals sem 1 91 runs, signals sem main/UI runs, excessSignals 21 92 queued to run 2 93 queued to run 3 94 queued to run 4 95 queued to run 5 consumeExcess, nowait, 96 queued to run 6 consumeExcess, nowait, 97 queued to run 7 consumeExcess, nowait, 98 queued to run 8 consumeExcess, nowait, 99 queued to run 7 92 runs, signals sem 6 93 runs, signals sem 5 94 runs, signals sem 4 95 runs, signals sem 3 96 runs, signals sem 2 97 runs, signals sem 1 98 runs, signals sem 0 99 runs, signals sem HTH, cheers -ben