📅  最后修改于: 2023-12-03 15:27:32.254000             🧑  作者: Mango
队列是一种常用的数据结构,它采用先进先出(First In First Out,FIFO)的原则,即最先进队列的元素最先被删除。在Ruby语言中,队列被实现为Queue类。
在Ruby中,创建一个队列非常简单,只需要调用Queue.new()函数即可创建一个新的队列。
queue = Queue.new()
向队列的末尾添加一个元素。该方法返回self,所以可以进行链式调用。
queue.push(1).push(2).push(3)
移除队列首元素并返回其值。如果队列为空,该方法会阻塞程序并等待新元素加入。
queue.pop()
可以使用<<操作符同时添加多个元素
queue << 1 << 2 << 3
返回队列中元素的个数
queue.length()
清空队列中的所有元素
queue.clear()
以下为一个简单的实例,它使用队列实现了一个简单的生产者-消费者模型。
queue = Queue.new()
# 生产者线程
producer = Thread.new do
10.times do |i|
sleep(rand(i)) # 模拟生产耗时
item = "Product #{i}"
puts "Produced #{item}"
queue.push(item)
end
end
# 消费者线程
consumer = Thread.new do
loop do
sleep(rand(5)) # 模拟消费耗时
item = queue.pop()
puts "Consumed #{item}"
end
end
# 等待两个线程执行完毕
producer.join()
consumer.join()
在这个实例中,生产者线程往队列中添加元素,消费者线程从队列中取出元素并进行消费。由于队列采用先进先出的原则,保证了消费者取出来的元素与生产者添加的元素顺序一致。