実行中のプログラムやサブルーチンが完了しないうちに、同じプログラムやサブルーチンを再び呼び出したとしても正常に動作でき、それぞれの実行が互いに影響を与えないことをいいます。
たとえば、マルチスレッドで動作するプログラムは、あるスレッドが実行中のサブルーチンを、その処理が完了しないうちに、ほかのスレッドも呼び出す可能性があります。また、割り込みによって呼び出されることも考えられます。そういった場合に、それぞれの実行が互いの動作に影響を与えたり、動作が正常でなくなったりしなければ、そのサブルーチンはリエントラント(再入可能)であるといえます。
プログラムそのものの場合は、同じプログラムを複数実行しても問題がなければ、そのプログラムはリエントラントであるということになります。
サブルーチンの中で、静的変数やグローバル変数、メモリ上のどこかにあるデータの読み書きや、ファイルなどの外部データの I/O といったことをしている場合、ある呼び出しのときに書き換えられたデータを、ほかの呼び出しのときに参照していると、互いの処理の影響を受けていることになるので、リエントラントではないことになります。サブルーチン内でしか生存しないローカル変数(自動変数)を使っているだけであれば、それぞれの呼び出しが互いに影響を与えることはなく、リエントラントである可能性が高いです。
再帰呼び出しを実現するためには、そのサブルーチンがリエントラントである必要があります。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |