1 collections define: #SharedQueue &parents: {ExtensibleSequence}
2 &slots: {#mutex -> Nil.
6 s@(SharedQueue traits) copy
9 s@(SharedQueue traits) new
11 s clone `setting: #{#mutex. #waitq. #inner}
12 to: {Semaphore newMutex.
17 s@(SharedQueue traits) isEmpty
22 s@(SharedQueue traits) addLast: x
24 s mutex critical: [s inner addLast: x].
29 s@(SharedQueue traits) removeFirst
32 s mutex critical: [s inner removeFirst]
35 "TODO: change the Queue protocol to a mixin/trait and re-use it here:"
36 "Queue-compatible protocol: " (
37 q@(Queue traits) remove [q removeFirst].
38 q@(Queue traits) remove: n [q removeFirst: n].
40 q@(Queue traits) push: obj [q add: obj].
41 q@(Queue traits) pop [q remove].
42 q@(Queue traits) pushAll: c [q addAll: c].
43 q@(Queue traits) pop: n [q remove: n].
48 load: 'src/lib/process.slate'.
49 load: 'src/lib/semaphore.slate'.
50 load: 'src/lib/sharedqueue.slate'.
51 lobby define: #q -> SharedQueue new.
53 [(1 to: 10) do: [|:i| q addLast: i. Scheduler yield. ]] spawn.
54 [[q removeFirst print. Console ; '\n'] loop] spawn.