我试图了解 Julia 中的多线程行为,并且注意到以下两个代码块在 Julia v1.6.3 中的行为有所不同(我在某个 script.jl 中的 Atom 中运行 Julia):
acc = 0
Threads.@threads for i in 1:1000
global acc
println(Threads.threadid(), ",", acc)
acc += 1
end
acc
Run Code Online (Sandbox Code Playgroud)
和
acc = 0
Threads.@threads for i in 1:1000
global acc
acc += 1
end
acc
Run Code Online (Sandbox Code Playgroud)
请注意,唯一的区别是我在后一种情况下去掉了“println(Threads.threadid(),”,”, acc)”。结果,每次运行第一个块都会给我 1000,第二个块会给我一些 <1000 的数字(由于竞争条件)。
我对 Julia 的并行计算(或一般的并行计算)完全陌生,因此希望能对这里发生的情况以及为什么单个打印行改变代码块的行为做出任何解释。