Убить всех рабочих потоков, когда один поток нашел ответ (ruby) - PullRequest
1 голос
/ 04 февраля 2010

Вот пример программы:

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

Я бы хотел, чтобы все потоки остановились, когда один из потоков нашел ответ (в данном случае 42). Я не уверен, как называется эта концепция, поэтому я не могу ее найти.

Я ценю помощь:)

1 Ответ

1 голос
/ 04 февраля 2010

Вам нужна переменная общего потока, которая указывает, нашел ли поток ответ и доступен ли потокам через Mutex.

...