Edited at

forとeachで挙動が違って辛かった

More than 3 years have passed since last update.


forを使ってThreadを作成

Threadを使って並行処理でそれぞれの


for_code

threads = []

for m in markets
# ThreadのオブジェクトIDはちゃんと違うの入っている
threads.push(Thread.new {
m.update()
})
end

threads.each {|t|
t.join
}


こんなコード書いたらひたすら最後の市場の情報を更新し続けて困った!


eachを使ってThreadを作成

なりべくeachを使うようにというお話があったことを思い出したので試してみた


each_code

threads = []

markets.each {|m|
threads.push(Thread.new {
m.update()
})
}
threads.each {|t|
t.join
}

ちゃんとすべての市場の情報が更新される様になった!


どうして?

forでもオブジェクトID異なっていることは確認しました.

どうしてこうなるの?