Torch 线程 - 在主线程和线程之间传输数据

我有一些线程,我想每隔一段时间向每个线程传递一个称为 reset 的上值,以便重置每个线程的表的值。 然后我要关闭重置,直到表完成了遍历。 但是,我没有成功地关闭重置(reset = false)似乎并没有停止它不断地重置。

for i = 1, n do
    local reset = true
    while true do
            threads:addjob(
               function()
                  if reset = true then f:reset(); reset = false; end
                  x,y = f:getBatch()
                  return x,y
               end,
               function(x,y)
                  -- do some stuff and trigger conditionMet = true if met
               end
            )
            if conditionMet == true break end

    end
end
点赞
用户117844
用户117844

你这里的 Upvalue "reset" 是只读的。线程序列化“reset”并读取它。因此,每次“while”循环迭代,线程都会读取并再次序列化复位。

而你似乎想要的是这样分解:

for i = 1, n do 
threads:addjob(
  function()
    __resetflag = true
  end
)
while true do
  threads:addjob(
    function()
      if __resetflag == true then f:reset(); __resetflag = false; end
      x,y = f:getBatch()
      return x,y
    end,
    function(x,y)
      -- do some stuff and trigger conditionMet = true if met
    end
  )
  if conditionMet == true break end
end
end
2016-07-23 19:07:01