Почему for (;;) {} больше не ломает мой компьютер? - PullRequest
3 голосов
/ 01 марта 2012

Несколько лет назад, когда я получил ученую степень, мой учитель сказал мне, что если я сделаю бесконечный цикл в C, это приведет к краху моего компьютера, заставив его использовать все ресурсы процессора без каких-либо затрат, и мне потребуется перезагрузить системусделать все снова хорошоСегодня я протестировал ту же ситуацию на своем компьютере с Windows Seven и увидел, что мой компьютер не сломался, а ресурсы процессора просто «простаивали».Что меняется с 5 лет назад до сегодняшнего дня, чтобы изменить это конкретное событие?

Ответы [ 4 ]

6 голосов
/ 01 марта 2012

Бесконечный цикл приведет к «краху» ОС, только если ОС не поддерживает вытесняющую многозадачность.В любой приличной ОС планировщик время от времени заставляет этот процесс делать перерыв и запускать другие вещи.

В любом случае, если использование ресурсов низкое, посмотрите на сгенерированный код - компилятор можетсделал что-то умное, например, оптимизировать все это.

3 голосов
/ 01 марта 2012

Ваш учитель сказал вам кое-что, что было неправдой с самого начала, поэтому неудивительно, что этого не происходит.

В большинстве случаев бесконечный цикл заставит ваш процессор работать на 100%но в любой современной операционной системе другие процессы все равно получат временные интервалы, и вы можете легко их убить.ОС была бы бесполезна, если бы простая ошибка программиста заставила всю машину зависнуть так легко.

0 голосов
/ 01 марта 2012

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

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

0 голосов
/ 01 марта 2012

Многоядерные процессоры широко используются в настоящее время, в отличие от 8 лет назад, что означает, что в настоящее время один процесс накачки может связать только одно ядро, а остальные ядра могут свободно выполнять другую работу. Тем не менее, вам придется использовать довольно паршивую операционную систему, чтобы один зацикленный процесс мог связать всю систему.

...