最終更新日:2026年8月14日
fe fe-technology programming software
まず結論
再入可能とは、あるプログラムが実行中でも、別の処理から再度呼び出されて正しく動作できる性質です。
再入可能は、英語では reentrant(リエントラント) と呼ばれます。
基本情報技術者試験では、次のように切り分けると判断しやすくなります。
自分自身を呼び出す
→ 再帰的
実行終了後に再び使える
→ 再使用可能
実行中でも別の処理から呼び出せる
→ 再入可能
メモリ上のどこに置いても実行できる
→ 再配置可能
特に、
まだ処理が終わっていない
+
別の処理から再度呼び出される
→ 再入可能
が重要です。
直感的な説明
再入可能は、同じ仕事をしている途中でも、別の依頼を受けて安全に処理できるイメージです。
例えば、ある関数が処理中だとします。
タスクA
↓
関数Xを実行中
その途中で別のタスクBも同じ関数Xを呼び出します。
タスクA → 関数X
タスクB → 関数X
このとき、それぞれの処理が混ざらず、正しい結果を返せるなら、その関数は再入可能です。
つまり、
同じプログラムを
同時に使っても壊れない
→ 再入可能
と考えると分かりやすいです。
定義・仕組み
再入可能なプログラムは、複数の処理から同時または重なって呼び出されても、互いの処理を壊さずに動作できます。
なぜ再入可能である必要があるのか
マルチタスク環境では、同じ関数や処理が複数のタスクから呼ばれることがあります。
例えば、
タスクA
→ 共通処理Xを呼ぶ
タスクB
→ 共通処理Xを呼ぶ
という状況です。
ここで、共通処理Xが内部の共有データを無秩序に書き換えると、結果が壊れることがあります。
そのため、再入可能な処理では、
- 呼出しごとのデータを分ける
- 共有データを書き換えない
- 必要に応じて排他制御する
などの工夫が必要です。
ローカルな状態を使う
再入可能性を高める代表的な考え方は、呼出しごとの状態を分けることです。
呼出しAの変数
→ A専用
呼出しBの変数
→ B専用
このようにすれば、同じ関数が同時に呼ばれても、互いの処理結果が混ざりにくくなります。
共有データには注意する
一方で、
全呼出しで共有する変数
を勝手に書き換えると、再入可能性が失われることがあります。
呼出しAが共有変数を書換え
↓
その途中で呼出しBも書換え
↓
値が壊れる
という問題が起こるためです。
科目Aでどう出る?
科目Aでは、再入可能・再帰的・再使用可能・再配置可能の意味を切り分ける問題が出ます。
判断表
| 用語 | 意味 | 判断キーワード |
|---|---|---|
| 再帰的 | 自分自身を呼び出す | 自己呼出し |
| 再使用可能 | 実行終了後に再ロードせず再利用できる | 再ロード不要 |
| 再入可能 | 実行中でも別の処理から再度呼び出せる | 同時呼出し |
| 再配置可能 | メモリ上の配置場所が変わっても実行できる | 配置場所に依存しない |
試験中の切り分け
自分を呼ぶ?
→ 再帰的
処理が終わったあと再利用?
→ 再使用可能
まだ実行中なのに別の処理から呼ばれる?
→ 再入可能
メモリの場所を変えても動く?
→ 再配置可能
この4つは、名前が似ているので「何が再び起きるのか」を見ると判断しやすくなります。
どんな場面で使う?
再入可能性は、同じ処理が複数のタスクやスレッドから使われる可能性がある場面で重要です。
例えば、
- OSの共通処理
- ライブラリ関数
- マルチスレッドプログラム
- サーバプログラム
- 割込み処理で呼ばれる関数
などです。
マルチタスク環境
複数のタスクが同じ共通処理を使う場合、
タスクA
タスクB
タスクC
↓
同じ関数を呼ぶ
ことがあります。
このような環境では、処理が重なっても正しく動くことが重要になります。
よくある誤解・混同
再入可能と再帰的は同じ?
違います。
自分自身を呼び出す
→ 再帰的
別の処理から実行中に再度呼ばれる
→ 再入可能
「再び呼ばれる」という点は似ていますが、呼び出す相手が違います。
再入可能と再使用可能は同じ?
違います。
処理終了後にもう一度使う
→ 再使用可能
まだ処理中なのに、別の処理から同時に使う
→ 再入可能
試験では、
終了していない
という表現が出たら、再入可能を疑います。
再配置可能とは?
再配置可能は、プログラムをメモリ上のどこに配置しても実行できる性質です。
アドレス1000から実行
↓
正しく動く
アドレス5000から実行
↓
正しく動く
このように、配置場所に依存しないことがポイントです。
再入可能なら必ずスレッドセーフ?
完全に同じ意味ではありません。
再入可能は、実行中に再度呼び出されても正しく動ける性質です。
一方、スレッドセーフは、複数スレッドから同時に利用しても正しく動作することを広く表す言葉です。
FEでは、まず
実行中に再度呼び出されても正しく動く
→ 再入可能
と整理できれば十分です。
確認問題(基本情報技術者試験対策)
あるプログラムAの処理が終了していないときに、別のプログラムから再度呼び出されても正しく動作する。このプログラムAの性質として、最も適切なものはどれか。
- ア. 再帰的
- イ. 再使用可能
- ウ. 再入可能
- エ. 再配置可能
▶ クリックして答えと解説を見る(ここを開く)
正解:ウ
再入可能とは、プログラムが実行中でも、別の処理から再度呼び出されて正しく動作できる性質です。
- 再帰的:自分自身を呼び出す
- 再使用可能:実行終了後に再ロードせず再び使用できる
- 再配置可能:メモリ上のどこに配置しても実行できる
まとめ(試験直前用)
- 再入可能は、実行中でも別の処理から再度呼び出せる性質
- 「まだ処理が終わっていないのに再度呼ばれる」→ 再入可能
- 自分自身を呼ぶのは再帰的
- 実行終了後に再利用できるのは再使用可能
- 配置場所を変えても動くのは再配置可能
- 再入可能な処理では、呼出しごとの状態を分けることが重要