【问题标题】:Torch threads - Transfer data between main and threads onceTorch 线程 - 在主线程和线程之间传输数据一次
【发布时间】:2016-11-27 03:27:00
【问题描述】:

所以我有一些线程,我想每隔一段时间将一个名为 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

【问题讨论】:

    标签: multithreading lua torch


    【解决方案1】:

    您在此处的上值“重置”是只读的。线程序列化“重置”并读取它。因此,“while”循环中的每次迭代,都由threads:addjob读取并再次序列化reset。

    您似乎想要的是以这种方式分解它:

    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
    

    【讨论】:

    • 这是在向每个线程上传 __resetflag = true 的值吗?我似乎只为其中一个线程执行此操作。
    • 我刚刚将重置 :addjob() 放在一个循环中,直到所有这些都被重置。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多