最終更新日:2026年8月30日
fe fe-technology programming software
まず結論
再入可能とは、あるプログラムが実行中でも、別の処理から再度呼び出されて正しく動作できる性質です。
再入可能は、英語では reentrant(リエントラント) と呼ばれます。
基本情報技術者試験では、次の4語を切り分けられるようにしておくと判断しやすくなります。
| 用語 | 一言でいうと | 問題文の合図 |
|---|---|---|
| 再入可能(リエントラント) | 同時に呼ばれても安全 | 同時実行、並行、干渉しない |
| 再帰的(リカーシブ) | 自分自身を呼び出す | 再帰、自己呼出し |
| 再使用可能(リユーザブル) | 実行後に再び使える | 再使用、再ロード不要 |
| 再配置可能(リロケータブル) | 配置場所を変えて使える | 再配置、別アドレス |
試験中は、次の対応で切るのが最も簡単です。
同時に呼ばれても大丈夫
→ 再入可能
自分自身を呼ぶ
→ 再帰的
もう一度使える
→ 再使用可能
別のアドレスへ移して使える
→ 再配置可能
直感的な説明
同じ手順書を、2人が同時に使う場面を考えます。
手順書の中に、利用者ごとに分けずに共有して書き換えるメモ欄があるとします。
利用者Aがメモを書く
↓
利用者Bも同じ欄を書き換える
↓
Aの途中状態が壊れる
これでは、同時に使うと正しく動きません。
一方、利用者ごとの途中状態を別々に持てるなら、同じ手順書を同時に使っても互いに干渉しません。
共通の処理手順
├─ 利用者Aの状態
└─ 利用者Bの状態
→ 同時に使っても干渉しない
これが再入可能のイメージです。
重要なのは、「複数回使える」ではなく「重なって呼び出されても安全」という点です。
定義・仕組み
再入可能なプログラムは、ある実行が終わる前に別の実行から再び呼び出されても、各実行が互いに影響せず正しく動作できます。
タスクA ─┐
├→ 同じ処理X
タスクB ─┘
このとき、処理Xが途中経過を共有して無秩序に書き換えると、結果が壊れる可能性があります。
そのため、再入可能な処理では、次のような考え方が重要になります。
- 呼出しごとの状態を分ける
- 共有する書換え可能データを安易に使わない
- 引数やローカル変数など、呼出しごとに分かれる状態を利用する
FE試験では実装条件を細かく暗記するより、「複数の処理から重なって呼び出されても干渉しない」という意味を押さえることが優先です。
再帰的(リカーシブ)
再帰的とは、処理の中から自分自身を呼び出せる性質です。
f()
└→ f()
└→ f()
これは同時実行の安全性ではなく、自己呼出しの話です。
再帰処理の実行順序や終了条件は、再帰処理とは?呼び出しと戻りを追う方法で詳しく整理しています。
再使用可能(リユーザブル)
再使用可能とは、一度実行したプログラムを、再ロードなどの特別な準備をせず再び使用できる性質です。
1回目の実行
↓
終了
↓
再び実行
ポイントは、1回目が終わってから2回目を使えるという再使用の話であり、同時に使えるかどうかとは別です。
再使用できる
≠
同時に使用しても安全
再配置可能(リロケータブル)
再配置可能とは、プログラムを主記憶上の別のアドレスへ配置しても実行できる性質です。
アドレス1000番地に配置
→ 実行可能
アドレス5000番地に配置
→ 実行可能
これは実行回数や同時実行ではなく、メモリ上の配置場所の話です。
4語を比較する
| 観点 | 再入可能 | 再帰的 | 再使用可能 | 再配置可能 |
|---|---|---|---|---|
| 中心テーマ | 同時呼出しの安全性 | 自己呼出し | 再使用 | メモリ上の再配置 |
| 同時実行が重要か | はい | いいえ | いいえ | いいえ |
| 自分自身を呼ぶか | 関係なし | はい | 関係なし | 関係なし |
| 実行後にもう一度使うか | 関係なし | 関係なし | はい | 関係なし |
| 配置アドレスを変えるか | 関係なし | 関係なし | 関係なし | はい |
このテーマは、基本情報技術者試験の「ソフトウェア」「オペレーティングシステム」と関係します。公式の出題範囲やシラバスは、IPA:試験要綱・シラバスについてから確認できます。
科目Aでどう出る?
科目Aでは、説明文から該当するプログラムの性質を選ばせる問題が出ます。
長い定義文を丸暗記するより、中心となる言葉を拾います。
複数のプロセスやタスクから同時に呼び出す
互いに干渉しない
→ 再入可能
自分自身を呼び出す
→ 再帰的
実行後に再ロードせず再び使える
→ 再使用可能
主記憶上の別の場所へ配置しても実行できる
→ 再配置可能
「再」という文字だけで判断しない
4語とも日本語では「再」が付くため、文字だけで覚えると混同しやすくなります。
再入可能
→ 実行中にもう一度入れる
再帰的
→ 自分自身へ戻って呼ぶ
再使用可能
→ もう一度使う
再配置可能
→ 場所を変える
何が再び起きるのかを見るのがポイントです。
並行処理という言葉があれば再入可能を疑う
複数のタスクやプロセスが同じ処理を重なって利用する説明なら、まず再入可能を疑います。
OSが複数タスクへCPUを割り当てる仕組み自体は、CPUスケジューリング方式とは?で整理しています。
複数タスクを実行する順番を決める
→ CPUスケジューリング
同じ処理を重なって使っても安全
→ 再入可能
役割は別なので混同しないようにします。
どんな場面で使う?
再入可能性は、同じ処理が複数のタスクやスレッドから使われる可能性がある場面で重要です。
例えば、
- OSの共通処理
- ライブラリ関数
- マルチスレッドプログラム
- サーバプログラム
- 割込み処理で呼ばれる関数
などです。
複数の処理を本当に同時に実行できるハードウェアのイメージは、マルチコアプロセッサとは?も合わせて読むと理解しやすくなります。
ただし、マルチコアであることと再入可能であることは別です。
マルチコア
→ 複数の処理を並列実行できるハードウェア側の仕組み
再入可能
→ 同じ処理が重なって呼ばれても安全というプログラム側の性質
よくある誤解・混同
再入可能と再帰的は同じ?
違います。
再入可能
→ 複数の実行主体から重なって呼び出されても安全
再帰的
→ 自分自身を呼び出す
「再び呼ばれる」という点だけで混同しないようにします。
再使用可能なら再入可能でもある?
必ずしもそうではありません。
一度の実行が終わったあとに再使用できても、2つの実行を重ねたときに共有状態が壊れるなら再入可能ではありません。
順番に何度も使える
→ 再使用可能
重ねて使っても安全
→ 再入可能
再配置可能は物理的な場所を変えること?
違います。
ここでいう「場所」は、主記憶上の配置アドレスです。
PCやサーバそのものを別の場所へ移動する話ではありません。
再入可能なら必ずスレッドセーフ?
完全に同じ意味ではありません。
再入可能は、実行中に再度呼び出されても正しく動ける性質です。
スレッドセーフは、複数スレッドから同時に利用しても正しく動作することを広く表す言葉です。
FEでは、まず次の判断で十分です。
実行中に別の処理から再度呼び出されても正しく動く
→ 再入可能
再入可能なら共有資源の競合は絶対に起こらない?
そういう意味ではありません。
再入可能は、その処理が重なって呼び出されても正しく動くように設計されている性質を表します。
システム全体で共有資源の競合そのものが存在しない、という意味ではありません。
まとめ(試験直前用)
- 再入可能:実行中でも別の処理から再度呼び出されて正しく動く
- 再帰的:自分自身を呼び出す
- 再使用可能:実行後に再び使用できる
- 再配置可能:主記憶上の別アドレスへ再配置できる
- 「同時」「並行」「干渉しない」が出たら再入可能を第一候補にする
- 4語は、同時呼出し・自己呼出し・再使用・再配置のどれを説明しているかで切り分ける
一言で覚えるなら、
同時なら再入可能、自分なら再帰、もう一度なら再使用、場所なら再配置。