带有.each / iterator的线程安全Ruby队列

时间:2015-02-23 07:46:19

标签: ruby concurrency iterator thread-safety queue

查看Queue API,我认为它没有#each实现或任何类型的迭代运行。反正我们可以将线程安全的队列转换为数组或列表而不操纵队列中的任何元素吗? (假设这个队列是不可变的。)

也许我没有很好地搜索Google,但是通过线程安全操作找不到与此相关的任何内容。

非常感谢任何回复。

1 个答案:

答案 0 :(得分:1)

Hamster gem提供了许多不可变的数据结构,其中包括一种队列形式 - Deque。

Deque没有实现each,但它可以转换为可迭代的List。

require 'hamster/deque'

q = Hamster::Deque[1,2,3]
q.to_list.each { |n| puts n }
# => 1
# => 2
# => 3

注意:Deque在v1.0.1发布候选版中可用。此版本尚未发布。较旧版本的Hamster不包括Deque,但有一些我不熟悉的Queue。