gpt4 book ai didi

ruby - 这些线程如何工作?

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

我有一个小代码只是为了测试

#!/usr/bin/env ruby

def A
puts "A"
sleep 2
end

def B
puts "B"
sleep 2
end

[
Thread.new(loop{A()}),
Thread.new(loop{B()})
].each do |thr|
thr.join
end

它并没有像我希望的那样工作。我希望我能得到

A
B
A
B

等等,但我只是

A
A
A
A

这意味着只有第一个线程被启动。这是否意味着 ruby​​ 等待第一个线程关闭以启动第二个线程?我如何将 Thread 作为线程运行,我希望我的应用程序中有线程,它们将并行工作,主应用程序线程将是它自己的工作。

你能给我什么建议?

最佳答案

代码不是在线程中运行循环,而是在主线程中运行循环;这使得线程由于无限循环而无法启动。

替换以下行(括号):

[
Thread.new(loop{A()}),
Thread.new(loop{B()})
]

带(大括号):

[
Thread.new{loop{A()}},
Thread.new{loop{B()}}
]

传递 block 而不是(无限)循环的返回值。

关于ruby - 这些线程如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27224234/

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