gpt4 book ai didi

ruby - .join 在 Ruby 线程中有什么意义?

转载 作者:行者123 更新时间:2023-12-02 02:01:11 25 4
gpt4 key购买 nike

让我们从这个问题中获取这段代码:

Ruby multiple background threads

并添加一行:

require 'thread'

def foo(&block)
bar(block)
end

def bar(block)
Thread.abort_on_exception=true
@main = Thread.new { block.call }
end


foo {
sleep 2
puts 'thread_1'
}.join

puts 'main_thread'

这是我得到的输出:
thread_1
main_thread

这对很多人来说似乎合乎逻辑,但对我来说不是。
我期待:
main_thread
thread_1

为什么?因为这就是我看待事物的方式
main_thread : ----------(starts thread_1)-(prints 'main_thread')--Done!

thread_1 : \-(sleeps 2 secs)----------(prints 'thread_1')--Done!

但这并没有发生。如果我删除 .join 部分,那么“thread_1”甚至不会出现。
根据我的理解 .join 挂断(暂停主线程)。为什么?这不是反对并发吗?帮助澄清我的想法?

最佳答案

Thread#join在继续之前等待子线程完成,因此预期结果确实是您所看到的。

如果您将 join 语句移动到文件的最后,然后跟随它:

puts 'main_thread joined!'

你会看到的:
main_thread
thread_1
main_thread joined!

关于ruby - .join 在 Ruby 线程中有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17172523/

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