2016-07-23 4 views
0

私は各スレッドのテーブルの値をリセットするために、各スレッドにリセットと呼ばれるupvalueを毎回渡すことを望むスレッドをいくつか持っています。テーブルがバッチ処理を終了するまで、リセットをオフにします。しかし、私はリセットを無効にして成功しなかった(リセット= 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 

答えて

1

ここで、あなたの上昇値「リセット」は読み取り専用です。スレッドは「リセット」をシリアル化して読み取ります。だから、 "while"ループのすべての反復は、スレッド:addjobによって再び読み込まれ、シリアル化されます。

あなたが代わりにしたいように見えるが、この方法でそれを打破することです。このアップロードは各スレッドに真__resetflag =の値

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 
+0

ですが?私は、スレッドの1つに対してこれを実行するように見えるだけです。 – mattdns

+0

私はちょうどリセットを入れました:addjob()はすべてループがリセットされるまでループします。これは大変感謝しています。 – mattdns

関連する問題