Когда два потока запускают определенный процесс отдельно, завершится ли программа, когда один поток вернет значение? - PullRequest
3 голосов
/ 11 апреля 2011

Вот сценарий:

У вас есть два потока (которые представляют разные машины), которые получают один и тот же ввод из единственного источника данных, проходят через одни и те же процессы (которые не зависят от каких-либо общих ресурсов) иверните то же значение.

Если один поток (читай: машина) быстрее другого и заканчивается первым, примет ли программа это значение и завершится, или она будет ждать завершения другого потока?Если ответ - последний, есть ли способ заставить программу принять первый ответ?

Практическая причина для этого - работать с невыносимо медленными компьютерами.

1 Ответ

4 голосов
/ 11 апреля 2011

Это полностью вам решать. Если вы создаете два потока, вы можете управлять ими из родительского процесса и решать, какое поведение вы хотите. Вы можете wait в обоих потоках или подождать, пока один из них не станет доступен (например, используя select из родительского потока или signal из дочернего потока), и, возможно, убить другой (используя сигнал снова, или kill).

Очень хороший справочник по системному программированию (многопроцессорность, потоки, связь, параллелизм ..), см. Системное программирование Unix в Objective Caml . У него есть пример (psearch здесь ), где потоки сотрудничают, чтобы найти результат, и останавливаются, как только один из них преуспел.

...