無限ループの恐怖
ある男がいた。
彼はたいへん真面目で、引き受けた仕事はすべて忠実にこなしていた。
また、たいへん慎重な性格でミスも少ないことが自慢だった。
ある日、その男は上司から呼び出された。
上司1「この書類を持って上司2のところへ行き、決済の印をもらってきてくれ」
書類を手に男は上司2のところへ赴いた。
上司2「決済?上司1は承認済みか?」
普通なら「決済をもらって来い」と言われた時点で上司1の承認は得ているはずなのだが、
万が一間違いがあっては困ると思い、男は上司1のところへ戻った。
上司1「決済はもらってきたか? 何? もらってない? 上司2の承認がないと先に進めない。
早くもらってきてくれ!!」
ものすごい剣幕で怒鳴りつける上司に押され確認が取れないまま再び上司2のところへ赴いた。
しかし、上司1の承認が取れていない、ということで結局追い返されてしまった。
そして上司1のところに戻ると、叱責の嵐とともにまた上司2のところへ向かわされた。
・・・・・・・・
今回の話のポイントは「無限ループ(循環参照)」。
上司1は上司2の承認がないと先に進めない、と言い
上司2は上司1の承認がないと先に進めない、と言う。
日常生活においてこのような状態は「堂々めぐり」と言われるが、
コンピュータの世界にもこの堂々巡りが存在する。
例えば計算式が入ったプログラムで
「a=1,b=2のとき、a+bはいくつになりますか? 整数で答えてください」
となっていればすぐに答えは出てくる。
しかし、
「a=b,b=aのとき、a+bはいくつになりますか? 整数で答えてください」
というプログラムを作ってしまうと無限ループが発生する。
なぜならばaは「bを参照しろ、ということはbの方に整数が入っているのだろう。
そうでないと答えが整数にならないし。」と思い、
bは「aを参照しろ、ということはaの方に整数が入っているのだろう。
そうでないと答えが整数にならないし。」と考える。
しかし現実にはa、bどちらにも整数が入っていないため、
答えが整数になることは永久にありえない。
だがコンピュータはそんなことは知るよしもないので、
いつの日か答えが整数になることを信じて延々と同じ計算・処理を繰り返す。
その結果として、最悪の場合コンピュータが動かなくなる場合もある。
この無限ループは意図的に作り出そうとして作られる、ということはあまり無い。
どちらかと言えば同じような処理を繰り返させるときに、
プログラムの書き方を間違えて起こってしまう、という場合が多いようである。
戻る