Глядя на Queue API, я не думаю, что он имеет реализацию #each
или любой вид итерации. В любом случае мы можем преобразовать потокобезопасную очередь в массив или список, не манипулируя никакими элементами внутри очереди? (Предположим, что эта очередь является неизменной.)Thread-Safe Ruby Queue с .each/iterator
Возможно, я не искал Google, но не смог найти ничего подходящего для этого при потокобезопасной работе.
Любой ответ очень ценится.
Я полагаю, что они не раскрывают такую функциональность, потому что это победит цель очереди. Убедившись, что один и только один потребитель может вытащить данный элемент из очереди, это то, что он делает. Если что-то может получить всю очередь в качестве итеративного объекта, что вещь может нанести хаос, так как мы в принципе никогда не можем предположить, что что-либо в Ruby является неизменным. Может быть, вы можете найти альтернативную реализацию? – Jesper
Вот связанная дискуссия о трудностях итерации над очередью: https://www.ruby-forum.com/topic/1539664 – Jesper
@ Jesper Я не согласен. Существует определенно прецедент для просмотра всех элементов в очереди без 'pop()' каждый элемент FIFO один за другим. Я уверен, что это сложно, поэтому я ищу другую альтернативу. – xbeta