Убив всех нити работников, когда один нить нашел ответ (Ruby)

StackOverflow https://stackoverflow.com/questions/2199282

Вопрос

Вот образец программы:

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). Я не уверен, что называется эта концепция, поэтому я не могу искать его.

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

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top