Ruby threads and variable
multithreading, ruby, thread-safety
Solution
The block that is passed to `Thread.new` may actually begin at some point in the future, and by that time the value of `i` may have changed. In your case, they all have incremented up to `10` prior to when all the threads actually run.
To fix this, use the form of `Thread.new` that accepts a parameter, in addition to the block:
require 'thread'
def run(i)
puts i
end
while true
for i in 0..10
Thread.new(i) { |j| run(j) }
end
sleep(100)
end
This sets the block variable `j` to the value of `i` at the time `new` was called.
Problem
Why the result is not from 1 to 10, but 10s only? ``` require 'thread' def run(i) puts i end while true for i in 0..10 Thread.new{ run(i)} end sleep(100) end ``` Result: ``` 10 10 10 10 10 10 10 10 10 10 10 ``` Why loop? I am running while loop, because later I want to iterate through the DB table all the time and echo any records that are retrieved from the DB.