Matando todos os trabalhadores do fio quando um tópico encontrou a resposta (rubi)
-
25-09-2019 - |
Pergunta
Aqui está um programa de amostra:
def worker(from, to)
puts "#{from}..#{to}"
for i in from..to do
if i == 42
puts "kill the rest of the threads"
break;
end
puts i
sleep 1
end
end
if __FILE__ == $0
threads = []
for i in 0..9 do
threads << Thread.new { worker(i*10, i*10+10) }
end
threads.each { |thread| thread.join }
end
Eu gostaria que todos os threads parassem quando um dos threads encontrou a resposta (neste caso, 42). Não tenho certeza do que esse conceito se chama, e é por isso que não consigo procurá -lo.
Agradeço a ajuda :)
Solução
Você precisa de uma variável de encadeamento compartilhada que indique se um thread encontrou a resposta e é acessado pelos threads por meio de um mutex.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow