gpt4 book ai didi

ruby - 如何只等待数组中的第一个线程在 Ruby 中完成?

转载 作者:太空宇宙 更新时间:2023-11-03 17:42:58 25 4
gpt4 key购买 nike

在 Ruby 中,等待数组中的每个线程完成其工作可以使用 Thread#join 来完成:

threads = []

threads << Thread.new { sleep 1 }
threads << Thread.new { sleep 5 }
threads << Thread.new { sleep 2 }

# waiting for all work to finish
threads.each(&:join)

但我需要做的是只等待数组的第一个线程完成。第一个完成后,我想停止执行。

在 Ruby 中是否有一种简单的方法或内置的方法来做到这一点?

最佳答案

要以线程安全的方式等待多个线程之一发生某事,您可以使用队列。

queue = Queue.new
threads = []

threads << Thread.new { sleep 2; queue.push(nil) }
threads << Thread.new { sleep 50; queue.push(nil) }
threads << Thread.new { sleep 20; queue.push(nil) }

# wait for one
queue.pop

# clean up the rest
threads.each(&:kill).each(&:join)

关于ruby - 如何只等待数组中的第一个线程在 Ruby 中完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51795629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com