digital-fabric / polyphony

Fine-grained concurrency for Ruby
https://www.rubydoc.info/gems/polyphony
MIT License
658 stars 17 forks source link

Queue implementation is missing methods from the stock Queue class #72

Closed noteflakes closed 2 years ago

noteflakes commented 2 years ago

Ruby docs:

First of all: close, closed?:

After the call to close completes, the following are true:

  • closed? will return true
  • close will be ignored.
  • calling enq/push/<< will raise a ClosedQueueError
  • when empty? is false, calling deq/pop/shift will return an object from the queue as usual.
  • when empty? is true, deq(false) will not suspend the thread and will return nil. deq(true) will raise a ThreadError.

ClosedQueueError is inherited from StopIteration, so that you can break loop block.

Also: any ongoing blocking call to shift/pop should return nil once the queue is closed.


Then we also have: