在协程之间共享一个变量
Sharing a variable between coroutines
我正在做一个高度密集的过程,我可以分成多个 coroutine
s,但在它们中,每当我得到正确的结果时,我都需要添加到一个变量。 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
感谢@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
我正在做一个高度密集的过程,我可以分成多个 coroutine
s,但在它们中,每当我得到正确的结果时,我都需要添加到一个变量。 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
感谢@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