Pracuję w wielowątkowości w ruby. Fragment kodu jestZakleszczenie w Ruby join()
threads_array = Array.new(num_of_threads)
1.upto(num_of_threads) do |i|
Thread.abort_on_exception = true
threads_array[i-1] = Thread.new {
catch(:exit) do
print "s #{i}"
user_id = nil
loop do
user_id = user_ids.pop()
if user_id == nil
print "a #{i}"
Thread.stop()
end
dosomething(user_id)
end
end
}
end
#puts "after thread"
threads_array.each {|thread| thread.join}
Nie używam żadnych blokad mutex. Ale pojawia się impasu .. Po wyjściu z powyższym fragmencie kodu ..
s 2s 6s 8S 1s 11s 10s 14s 16s 7s 21S 24S 5s 26s 20s 23S 19S 3s 4s 28S 9s 12s 18s 29s 30s 27s 22S 13S wykryto zakleszczenie
powyższym przykładzie mówi, że zakleszczenie gdy tablica user_ids traci swoją: 17S 15s 25a 4a 10a 3a 6a 21a 24a 16a 9a 18a 5a 28a 20a 2a 22a 11a 29a 8a 14a 23a 26a 1a 19a 7a 12fatal dzieje się z join() i stop() klasy Thread w Ruby .. Co tak naprawdę się dzieje i jakie jest rozwiązanie tego błędu?
czy moja odpowiedź była pomocna? Czy rozwiązałeś problem? –