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 :)

Foi útil?

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
scroll top