Hi Vince, some of your problem may be in the Transcript buffering some of its output. It is best to add a ; flush to the end of all your printing, e.g. Transcript show: 'waiting...'; cr ; flush. HTH
On May 10, 2016, at 07:31, Vince Refiti <vinref@gmail.com> wrote:
Hello
I am playing around with Semaphore, and wrote the following:
| coll count sem | coll := Array withAll: (1 to: 100). count := 0. sem := Semaphore new. coll do: [ :each | count := count + 1. (count >= 5) ifTrue: [ Transcript show: 'waiting...'; cr. sem wait ].
[ [ 2 seconds asDelay wait. Transcript show: each printString, ' ', count printString; cr ] ensure: [ count := count -1. sem signal ] ] fork ]
The output is:
waiting... 1 End of statement list encountered ->5 2 4 3 3 4 2 waiting... waiting... waiting... waiting... 5 8 6 7 7 6 8 5 9 4 10 3 11 2 waiting... waiting... waiting... waiting... waiting... waiting... waiting... 12 11 13 10 14 9 15 8 16 7 17 6 18 5 19 4 20 3 21 2 waiting... waiting... waiting... waiting... waiting... waiting... waiting... waiting... waiting... waiting... 22 14 23 13 24 12 25 11 26 10 27 9 28 8 29 7 30 6 31 5 32 4 33 3 34 2 waiting... waiting... waiting... waiting... waiting... waiting... waiting... waiting... waiting... waiting... waiting... waiting... waiting... 35 17 36 16 37 15 38 14 39 13 40 12 41 11 42 10 43 9 44 8 45 7 46 6 47 5 48 4 49 3 50 2 waiting... waiting... waiting... waiting... waiting... waiting... waiting... waiting... waiting... waiting... waiting... waiting... waiting... waiting... waiting... waiting... 51 20 52 19 53 18 54 17 55 16 56 15 57 14 58 13 59 12 60 11 61 10 62 9 63 8 64 7 65 6 66 5 67 4 68 3 69 2 waiting... waiting... waiting... waiting... waiting... waiting... waiting... waiting... waiting... waiting... waiting... waiting... waiting... waiting... waiting... waiting... waiting... waiting... waiting... 70 23 waiting... 71 23 72 22 73 21 74 20 75 19 76 18 77 17 waiting... waiting... waiting... waiting... waiting... waiting... waiting... 78 23 79 22 80 21 81 20 82 19 83 18 84 17 85 16 86 15 87 14 88 13 89 12 90 11 91 10 92 9 93 8 94 7 95 6 96 5 97 4 98 3 99 2 100 1
I was expecting 'waiting...' to alternate with the 'each-count' lines. Also the entire statement paused for 2 seconds, spat out some lines, then waited a little longer, and then finished.
Can someone please explain this pattern?
Thanks, Vince
---> Save our in-boxes! http://emailcharter.org <--- Johan Fabry - http://pleiad.cl/~jfabry PLEIAD and RyCh labs - Computer Science Department (DCC) - University of Chile