多线程 Julia 显示枚举迭代器错误

coo*_*lsv 4 multithreading iterator for-loop enumerate julia

为什么这段非常简单的代码会在 Julia 1.1 中导致错误?

Threads.@threads for (index,value) in enumerate([0.1,0.2,0.3])
    println(value^index)

end
Run Code Online (Sandbox Code Playgroud)

显示的错误是:

Error thrown in threaded loop on thread 0: MethodError(f=typeof(Base.unsafe_getindex)(), args=(Base.Iterators.Enumerate{Array{Float64, 1}}(itr=Array{Float64, (3,)}[0.1, 0.2, 0.3]), 1), world=0x00000000000069dc)
Error thrown in threaded loop on thread 1: MethodError(f=typeof(Base.unsafe_getindex)(), args=(Base.Iterators.Enumerate{Array{Float64, 1}}(itr=Array{Float64, (3,)}[0.1, 0.2, 0.3]), 3), world=0x00000000000069dc)
Run Code Online (Sandbox Code Playgroud)

我想在使用迭代器的Threads.@threads地方使用更复杂的代码enumerate

Bog*_*ski 6

Threads.@threads马可预计的阵列,以仅遍历。在这里,您可以找到有关 Discourse 的主题的链接。

因此,目前您必须仅使用 egaxes或 eg迭代索引collect eachindex(这并不理想)。

所以在你的情况下,这将是:

vec = [0.1,0.2,0.3]
Threads.@threads for index in axes(vec, 1)
    println(vec[index]^index)
end
Run Code Online (Sandbox Code Playgroud)

或者

Threads.@threads for (index,value) in collect(enumerate([0.1,0.2,0.3]))
    println(value^index)
end
Run Code Online (Sandbox Code Playgroud)