@Lastchance

Зависнет ли одноядерный компьютер при while(1) {}?

1) Допустим есть такая программа на c++
int main()
{
while(1) {};
}

Представим что у нас одноядерный компьютер и операционная система которая поддерживает многопотночность. Верно ли то что эта программа приведет к полному зависанию компьютера (Другие потоки не смогут исполнятся, потому что ядро не сможет прервать поток, так как в этой программе нет системного вызова ядра, а значит и прерывать поток некому.)
  • Вопрос задан
  • 760 просмотров
Решения вопроса 2
Stalker_RED
@Stalker_RED
Зависит от операционной системы и от железа.

Если мы говорим о windows, то начиная с вин 9x операционная система периодически получает управление даже при наличии зависших процессов.
Ответ написан
saboteur_kiev
@saboteur_kiev Куратор тега Программирование
software engineer
Управление приложениями начиная с Windows NT изменилось, и такой вариант уже не помешает. Но собственно кто вам мешает на практике попробовать?
Ваша программа просто крутит цикл. Она не запрещает прерывания, а управление процессами сделано в основном через прерывание таймера, пока не поставите ей realtime приоритет - тогда прерывания не смогут ее прервать.
Разве что будет запущен еще один процесс с realtime приоритетом, например диспетчер задач - в этом случае они будут делить циклы и можно будет остановить ваш процесс.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
petermzg
@petermzg
Самый лучший программист
При вытесняющей многозадачности через определенное время будет сгенерированно прерывание из которого ОС переключит данный поток на другой. Зависания не будет. (Windows, Linux и т.д.)
При кооперативной многозадачности, пока поток не сообщит, что завершил задачу, на другой переключения не будет. Зависнет.
Ответ написан
Комментировать
maaGames
@maaGames
Погроммирую программы
Если процессу выставить приоритет REALTIME, тогда "верно". В общем же случае - нет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы