在协程之间共享变量

我正在进行一项高强度的处理,可以将其拆分为多个 协程,但在其中,每当我获得正确的结果时,我需要向一个变量添加内容。目前 Lua 似乎会为每个线程重置我正在添加内容的变量,从而给我带来不正确的结果。

我已经进行了大量查找,但没有找到类似的问题。

相关代码

s=0

function calc(x,n)
    print(x,n)
    for a=x,n,1 do
        for b=a+1,n-1,1 do
            if is_coprime(a,b,false) then
                c=math.sqrt((a^2)+(b^2))
                if c<=b or c>n then break; end
                if is_coprime(a,b,c) then
                    s=s+1
                    break
                end
            end
        end
    end
end

function main(n)
    local t=0
    for i=1,n,n*.1 do
        co=coroutine.create(calc)
        coroutine.resume(co,i,n)
    end
    for _,v in ipairs(s) do
        t=t+1
    end
    return t
end
点赞
用户5388567
用户5388567

感谢 @NicolBolas 的评论,我完全放弃了协程,只使用更小的缓冲区循环一切。

function calc(x,n)
    local t={}
    for a=x,n,1 do
        for b=a+1,a^10,1 do
            if is_coprime(a,b,false) then
                c=math.sqrt((a^2)+(b^2))
                if c<=b or c>n then break; end
                if is_coprime(a,b,c) then
                    print(a,b,c)
                    t[tostring(a)..' '..tostring(b)..' '..tostring(c)]=true
                    break
                end
            end
        end
    end
    return t
end

function main(n)
    local t,s=0,{}
    for i=1,n,n*.1 do
        for k,v in pairs(calc(i,n)) do
            if s[k]==nil then
                s[k]=true
                t=t+1
            end
        end
    end
    return t
end
2016-04-02 16:58:00