Multithreading 火炬多线程
我有一个表H_next,我进行一些计算(调用add())并将值存储在H_next中,该值在所有线程中共享Multithreading 火炬多线程,multithreading,lua,torch,Multithreading,Lua,Torch,我有一个表H_next,我进行一些计算(调用add())并将值存储在H_next中,该值在所有线程中共享 local function add(a,b) return (a+b) end function indexer:cal() local H_next={} local temp_H_next={} local count = 1 for i = 1,100 do local val =10 self.pool:ad
local function add(a,b)
return (a+b)
end
function indexer:cal()
local H_next={}
local temp_H_next={}
local count = 1
for i = 1,100 do
local val =10
self.pool:addjob(function()
H_next[i] = add(i,val+1)
--print (H_next[i])
return H_next
end
,
function(val)
for i=1,#val do
temp_H_next[count] = val[i]
count = count + 1
end
--temp_H_next[count] = val
--[[H_next[count] = val
count = count + 1--]]
end)
end
self.pool:synchronize()
self.pool:terminate()
for i,v in pairs(temp_H_next) do
print (i,v)
end
end
这只打印2个值
我只能在修改函数时获得所有值,如下所示
local H_next={}
local temp_H_next={}
local count = 1
for i = 1,100 do
local val =10
self.pool:addjob(function()
H_next[i] = add(i,val+1)
--print (H_next[i])
return H_next[i] -- When I return one by one
end
,
function(val)
--[[for i=1,#val do
temp_H_next[count] = val[i]
count = count + 1
end--]]
temp_H_next[count] = val
count = count + 1
end)
end
第二种方法的问题是,在子线程和主线程之间进行通信需要花费大量时间,我想填充该特定线程的H_next表,然后使用endcallback传输这些值或在temp_H_next中复制主线程中的这些值。
有没有更好的方法来做到这一点,我不必一次发送一个接一个的值