gpt4 book ai didi

multithreading - Julia线程中的变量是循环线程本地的吗?

转载 作者:行者123 更新时间:2023-12-03 12:46:09 27 4
gpt4 key购买 nike

Threads.@threads for i in [sth]
x = 123
...
end
x线程本地。我找不到任何关于它的文件。
如果没有,我怎样才能获得一个本地线程。

最佳答案

假设 x在循环内是本地的,那么是的。这是一个如何检查它的示例:

# julia -t 2 --banner=no
julia> Threads.@threads for i in 1:8
x = i
@info Threads.threadid(), i, x
sleep(rand())
@info Threads.threadid(), i, x
end
[ Info: (1, 1, 1)
[ Info: (2, 5, 5)
[ Info: (1, 1, 1)
[ Info: (1, 2, 2)
[ Info: (2, 5, 5)
[ Info: (2, 6, 6)
[ Info: (1, 2, 2)
[ Info: (1, 3, 3)
[ Info: (2, 6, 6)
[ Info: (1, 3, 3)
[ Info: (1, 4, 4)
[ Info: (2, 7, 7)
[ Info: (1, 4, 4)
[ Info: (2, 7, 7)
[ Info: (2, 8, 8)
[ Info: (2, 8, 8)
对于每个线程, for 中传递的任何内容带有 Threads.@threads 注释的循环体被包裹在一个匿名函数中。您可以使用 @macroexpand 进行检查。功能。
请注意,它甚至更多 x : 在循环的每次迭代中获得一个新的绑定(bind)(这是 Julia 的标准行为——无论是单线程还是多线程代码,参见 here )。
如果 x不是 for 中的局部变量循环这不再是真的了,你可以在这里看到:
# julia -t 2 --banner=no
julia> function f()
x = 1
Threads.@threads for i in 1:8
x = i
@info Threads.threadid(), i, x
sleep(rand())
@info Threads.threadid(), i, x
end
end
f (generic function with 1 method)

julia> f()
[ Info: (1, 1, 5)
[ Info: (2, 5, 5)
[ Info: (1, 1, 5)
[ Info: (1, 2, 2)
[ Info: (2, 5, 2)
[ Info: (2, 6, 6)
[ Info: (2, 6, 6)
[ Info: (2, 7, 7)
[ Info: (1, 2, 7)
[ Info: (1, 3, 3)
[ Info: (1, 3, 3)
[ Info: (1, 4, 4)
[ Info: (2, 7, 4)
[ Info: (2, 8, 8)
[ Info: (2, 8, 8)
[ Info: (1, 4, 8)

关于multithreading - Julia线程中的变量是循环线程本地的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65334405/

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