プログラムの性質(program properties)

分類
テクノロジ系 アルゴリズムとプログラミング
出る試験
基本情報応用情報
重要度
★★★☆☆

再使用可能・再入可能・再帰的・再配置可能の4つ。似た名前で、問うていることがそれぞれ違う。

もう少し詳しい説明

プログラムには、どう使い回せるかを表す4つの性質があります。名前がどれも「再」で始まるうえ意味が近いので、試験では取り違えを狙って並べて出されます。

先に、それぞれが何を問うているのかを1行で押さえてください。

性質問うていること
再使用可能(リユーザブル)もう一度使えるか
再入可能(リエントラント)同時に使えるか
再帰的(リカーシブ)自分を呼べるか
再配置可能(リロケータブル)どこに置けるか

再使用可能

一度実行し終えたプログラムを、読み込み直さずにもう一度実行できる性質です。

当たり前に思えますが、そうでないプログラムもあります。実行中に自分の中の値を書き換えてしまうと、2回目は書き換わったあとの状態から始まり、違う結果になります。そうならないよう、終わったときに最初の状態へ戻してあるか、そもそも書き換えないようにしてあるものが再使用可能です。

再入可能

まだ実行の終わっていないプログラムへ、別のタスクが同時に入ってきても壊れない性質です。「入り直せる」と読むと、意味がつかめます。

呼ぶ同時に呼ぶタスクAAのデータ領域を持つプログラム本体主記憶に1つだけ。実行中に自分を書き換えないタスクBBのデータ領域を持つ
プログラムの本体は主記憶に1つしかなく、タスクAとタスクBがそれを同時に使っています。書き換わる値は、タスクごとに別の場所へ置きます。この分け方ができているものが再入可能です。

ここで大事なのは、プログラムの本体は主記憶(いま使うプログラムとデータを置いておく記憶装置)に1つしかないという点です。同時に動かすために複製するのではありません。複製しないからこそ、主記憶の節約になります。

そのかわり、書き換わる値だけはタスクごとに分ける必要があります。計算の途中の値を本体の中に置いてしまうと、タスクAが書いた値をタスクBが上書きし、両方とも答えを間違えます。

再入可能なプログラムは、再使用可能でもあります。 実行中に割り込まれても平気なのだから、終わったあとにもう一度使えないはずがありません。逆は成り立ちません。

再帰的

処理の途中から、その処理自身を呼び出せる性質です。中身は再帰そのもので、「そういう書き方ができるプログラムである」と言っているだけです。

自分を呼ぶということは、前の呼び出しがまだ終わっていないのに、もう一度入ってくるということです。つまり再帰的に書けるためには、再入可能であることが土台になります。

再配置可能

主記憶のどの位置に置いても、正しく実行できる性質です。

プログラムの中で場所を「主記憶の1000番地」と書いてしまうと、そこに置けなかったときに動きません。「この命令から20個先」のように相対的な書き方にしておけば、全体がどこへ移っても関係が崩れません。

いまのコンピュータでは、プログラムの置き場所は仮想記憶の都合で実行のたびに変わります。再配置可能であることは、もはや前提になっています。

4つは並び立つ

この4つは、段階でも順番でもありません。別々の問いへの答えなので、1つのプログラムが4つとも満たすこともあれば、1つも満たさないこともあります。

試験で迷ったら、名前を日本語に戻してください。再入可能の「入」は、いま実行中のものへ入っていくことです。終わったあとにまた使う話ではありません。ここが分かれ目になります。

何に使われているのか

OSや、多くのプログラムから共通して使われる部品(共有ライブラリ(よく使う処理をまとめておき、どのプログラムからも呼び出せるようにした部品))は、再入可能に作るのが当たり前になっています。使う人の数だけ複製していたら、主記憶がいくらあっても足りないためです。

プロセスとスレッドの仕組みで同じ処理を同時に走らせるとき、その処理が再入可能でなければ結果が壊れます。再入可能にできない部分が残る場合は、排他制御で順番に使わせることになります。

試験ではこう出る

科目A(旧・午前)で出ます。いちばん多いのは、4つのうち1つを挙げて、その説明を選ばせる問題です。選択肢には残り3つの説明が並ぶので、言葉の意味を取り違えていると、確実に点を失います。

出題が多いのは再入可能です。「複数のタスクが同時に実行しても正しく動く」が答えになります。

性質答えになる表現
再使用可能再ロードせずに、もう一度実行できる
再入可能複数のタスクが同時に実行しても、正しく動く
再帰的実行中に、自分自身を呼び出せる
再配置可能主記憶のどの位置に配置しても、実行できる

応用情報では、再入可能にするための条件まで問われます。「実行中に自分自身を書き換えない」「書き換わる値はタスクごとに別の領域へ置く」の2つが要点です。

関連する用語

再帰
自分自身を呼び出す書き方。4つのうち「再帰的」が指しているのは、この書き方ができること
プロセスとスレッド
実行の単位。1つのプログラムを複数のスレッドが同時に使う場面で、再入可能かどうかが効いてくる
排他制御
同時に触らせない仕組み。再入可能にできない部分は、こちらで守ることになる
仮想記憶
主記憶より大きく見せる仕組み。置き場所が実行のたびに変わるので、再配置可能であることが前提になる
主記憶
CPUが直接読み書きする記憶。4つの性質は、どれもここにプログラムを置いたときの話

ミニクイズ

再入可能なプログラムの説明として、最も適切なものはどれか。

正解は 3番:複数のタスクが同時に呼び出しても、それぞれが正しい結果を得られる

再入可能は「入り直せる」という意味で、まだ実行の終わっていないプログラムへ、別のタスクが同時に入ってきても壊れないことを指します。そのためには、実行中に書き換わる値をタスクごとに別の場所へ置き、プログラム本体は自分を書き換えないようにします。再ロードせずにもう一度使えるのは再使用可能、自分自身を呼び出せるのは再帰的、置き場所を選ばないのは再配置可能です。4つは似た名前ですが、同時に使えるか、もう一度使えるか、自分を呼べるか、どこに置けるか、と問うていることが別々です。

間違えた用語の復習リストを見る →

この分野をまとめて解く → アルゴリズムとプログラミングのミニテスト(全44問)

最終更新:2026-10-09