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

Multi-threading Julia shows error with enumerate iterator

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

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

end

显示的错误是:

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)

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

Threads.@threads marco 期望数组仅迭代。 Here 你有一个关于 Discourse 的话题 link。

所以目前你只能使用例如迭代索引axes 或例如collect eachindex(这并不理想)。

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

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

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