Скажем, у нас есть какой-то поток, который хочет проверить, когда другой поток завершил свою задачу. Я прочитал, что мы должны вызвать функцию типа wait (), которая заставит этот поток ждать, пока он не получит уведомление о завершении другого потока. И это хорошо, потому что это означает, что мы не проводим дорогой опрос.
Но не происходит ли опрос внутри страны на более низком уровне? Т.е. если мы сделаем поток wait (), разве ядро не выполняет опрос в любом случае, чтобы проверить, когда другой поток завершил работу, чтобы он мог затем уведомить первый поток?
Я полагаю, что я что-то упускаю здесь, кто-то может просветить меня?
_exit(2)
в системах POSIX-y) или невольно (например, ошибка, такая как деление на ноль, генерирует прерывание или что-то еще вызываетkill(2)
). В любом случае управление явно возвращается ОС, которая знает, какой процесс запущен или должен быть уничтожен. Работа по завершению процесса включает в себя освобождение его ресурсов, включая мьютексы. Если мьютекс удерживался мертвым процессом, ОС освободит его. Если процесс был в списке ожидания мьютекса, он будет удален.