- ベストアンサー
無限ループ対策
プログラミングのデバッグ時、無限ループに入ってしまい、プログラムを強制終了することもままならなくなることがあります。 CPUのリソースを完全に使っているために、こちらの入力を受け付けなくなると思うのですが、 マルチCPU環境ではどういった状態になるのでしょうか? 無限ループは起こらないのでしょうか? さらに、デュアルコアCPUの場合はどうなのでしょうか? 無限ループのもどかしさから開放されるならPCを新調しようと思うのですが、 何かご存知の方教えてください。よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
前にも書かれていますか? その時は、Apacheだったとか。 私も興味をもち、Apacheのtimeoutの設定をして、無限ループをしたのですが、見事にフリーズ。(w 回答するのが面倒になり、回答しなかったのを覚えています。 w2k環境でUsers権限でapacheをPower権限で動かしていたので、プロセスを殺す事もできませんでした。;; フリーズですが、片方がフリーズしてももう片方が動くので、どうやらシステムが止まる事はないようです。 でも、無限ループの場合はCPUが100%になるので、あんまり良くはないとは思いますが。 実際に使った事はないので、わかりません。 無限ループですが、無限ループをさせない工夫の方が大切だと思いますよ。 私は、変数がなくなるまでループするような時でも、上限を決めています。 1000回実行したら、breakするとか。 Perl、PHPなら、$i++ とif文だけで片づきますし。 一応、入力時の変数のチェックもしていますが、文字コードや相手の環境、システムのバグなんかもありますし。 最悪サーバでの無限ループは避けたいと思っているのでの、ダブルチェック、トリプルチェックはしているつもりです。 ローカル環境でも強制終了は、HDDにも危険ですからねー。
その他の回答 (3)
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
>マルチCPU環境ではどういった状態になるのでしょうか? マルチCPUのマシンでは、シングルスレッドのプログラムは、 一つのCPUしか使わないので、CPU全体の50%を 占有した状態になります。 >無限ループは起こらないのでしょうか? 無限ループ自体は、環境でなく、プログラムを作る人の 善し悪しが招く問題です。 如何なる環境であろうと無限ループは起こりえます。 起こった場合の被害の大小が環境によって違う。 起こった場合に被害を最小限に納める仕組みがある。 などの違いはあると思いますが.. >無限ループのもどかしさから開放されるならPCを新調しようと思うのですが、 PCを変えても、無限ループ自体は、制作物の品質が悪ければ起こるわけで、 結局は、デバックする必要があるのだから、環境のせいにするより 自分の力を磨く方が良いかと思いますよ。
- coredump
- ベストアンサー率46% (12/26)
どもです。 通常は無限ループにならないようにするのが基本です。 無限ループでポーリングしなければならないなどの状況も考えられるのですが、このような場合にはループの中にsleepを入れてあげればCPUの使用率を抑えることが出来ます。Winならループ内にSleep(1);を入れてあげるだけで、ハングしたような状況は防げます。
- 0KG00
- ベストアンサー率36% (334/913)
無限ループというよりは、タスク(プロセス)がCPUをつかんで離すかどうかの問題ですよね。 CPUが何れであれ、免れないですね。 どちらかというと、NT系などのプリエンプティブなマルチタスクOSだと免れやすいかもしれませんが、保存をしないまま実行すると危険なことは変わりありません。 CPU新調よりはOSの変更のほうが効果がありますよ。
お礼
とりあえずWindowsXPを使っているのですが、無限LOOPになると タスクマネージャーを開くにも相当時間がかかります。 これはもうガマンするしかないのでしょうかね。