На самом деле, думать о времени в " космическом смысле " - это хороший способ думать о времени в распределенной системе (включая многоядерные системы).Не все системы (или ядра) разгоняют свои часы с одинаковой скоростью, что затрудняет точное определение того, какие события произошли первыми (по времени настенных часов ).Из-за этой неспособности согласиться, системы имеют тенденцию измерять время с помощью логических часов .Два события происходят одновременно (т. Е. «Точно в одно и то же время»), если они не упорядочены путем обмена данными друг с другом или иным образом координируют их выполнение.
Кроме того, вам необходимо определить, когда именно процесс имеет "вышел «.Думая в Linux, это когда он выводит на экран сообщение о выходе?Когда он вернется из main()
?Когда он выполняет системный вызов exit()
?Когда его состояние процесса запускается, устанавливается "выход" в ядре?Когда родитель процесса получает SIGCHLD?
Итак, возвращаясь к вашему вопросу (с точным определением «точно в одно и то же время»), два процесса могут завершиться (или выполнить любое другое событие) точно вв то же время , пока ничто не координирует их выход (или другое событие).То, что считается координацией, зависит от вашей архитектуры и модели памяти , поэтому некоторые из перечисленных выше «вышедших» условий всегда можно упорядочить на низком уровне или с помощью синхронизации в ОС.
Вам даже не нужно «точно» одновременно.Иногда вы можете быть достаточно близко, чтобы казалось одновременным.Даже на одном ядре без истинного параллелизма могут появиться два процесса одновременно, если, например, два дочерних процесса вышли до того, как был запланирован следующий родительский процесс.Неважно, кто действительно вышел первым;родитель увидит, что через мгновение, когда он не работал, оба ребенка умерли.