为什么for(;;){}不再崩溃我的电脑?

时间:2012-03-01 17:35:31

标签: c for-loop infinite-loop

几年前,当我获得学位时,我的老师告诉我,如果我在C中进行无限循环,它会使我的计算机崩溃,使其无需使用所有处理器资源,我需要重新启动系统让事情再好。今天我在Windows 7计算机上测试了相同的情况,我看到我的计算机没有崩溃,我的处理器资源只是“空闲”。从5年前到今天有什么变化来改变这个特定的事件?

4 个答案:

答案 0 :(得分:6)

无限循环只会"崩溃"操作系统,如果操作系统不支持抢占式多任务处理。在任何体面的操作系统中,调度程序都会使该过程暂时中断,并允许其他内容运行。

无论如何,如果资源使用率很低,请查看生成的代码 - 编译器可能已经做了一些聪明的事情,比如优化整个事情。

答案 1 :(得分:3)

你的老师告诉你一些开始时并不属实的事情,所以不会发生这种情况并不奇怪。

最多,无限循环将使您的CPU达到100%,但在任何现代操作系统上,其他进程仍会获得时间片,您可以轻松杀死它。如果程序员的一个简单错误使得整个机器很容易挂起,操作系统就不会有多大用处。

答案 2 :(得分:0)

与8年前不同,多核处理器现在已经普遍使用,这意味着单个信息流程现在只能占用单个核心,而其余核心可以自由地完成其他工作。即使这样,你也必须运行一个非常糟糕的操作系统,以允许一个繁忙的循环过程来占用整个系统。

答案 3 :(得分:0)

自从W95以来,Windows已经拥有抢占式多任务。即使在单CPU盒子上,一个looper线程仍然可以使盒子可用,(虽然速度较慢),当然可用于以通常方式关闭违规进程或启动任务管理器并终止进程。

要真正让你陷入困境,提升线程并将优先级处理为实时,并创建与核心一样多的线程,(保存你的工作)。