再入可能プログラム(リエントラント)とは?さいにゅうかのうぷろぐらむ
再入可能プログラム(リエントラント)とは、同時に複数のタスクから呼び出されても、それぞれが正しい結果を得られるプログラムの性質。鍵になるのは状態の置き場所で、書き換える領域を呼出し側のスタックやタスク固有の領域に持たせ、コード部と共有データを書き換えないようにする。実体を1つ共有できるため主記憶を節約できる。
最終更新:2026-10-06
この語が出る過去問を解く →背景
多重プログラミングが当たり前になると、同じライブラリを複数のタスクが同時に使う場面が生じる。タスクごとにコードを複製すれば安全だが、主記憶が限られた時代にそれは許されない。実体を1つのまま安全に共有するには、書き換わる部分だけを呼出しごとに分けるしかない——この制約から生まれた性質で、共有ライブラリとマルチスレッドの前提として現在も残っている。
具体例
OSのシステムコールやC言語の標準ライブラリの多くは、この性質を満たすよう作られている。逆に処理結果を静的変数へ溜める実装は再入不可で、複数スレッドから呼ぶと互いの値を壊す。C標準ライブラリのstrtokに、状態を呼出し側に持たせるstrtok_rが別に用意されているのはこのためである。
試験での引っ掛け
再使用可能(一度実行した後も再ロードせずに再実行できる)、再配置可能(主記憶のどの位置に置いても動く)、再帰的(自分自身を呼び出せる)との混同が定番。再入可能なら再使用可能だが、逆は必ずしも成り立たない。またロックで守っているだけの実装はスレッドセーフではあっても再入可能とは言わない。
関連用語
出た過去問
問題文で直接問われたものと、解説の中で触れられたものが含まれます。
出典:平成28年度 春期 応用情報技術者試験 午前 問7(IPA)
リアルタイムシステムにおいて,複数のタスクから同時に呼び出された場合に,並行して実行する必要がある共用ライブラリのプログラムに要求される性質はどれか。
正解:リエントラント
要点:共用ライブラリの同時呼出しにはリエントラント性が必要
リエントラント(再入可能)とは、複数のタスクから同時に呼び出されても正しく動作する性質のことである。プログラム中で書き換わるデータを共有せずタスクごとの領域に置くことで実現され、共用ライブラリに必要な性質である。
出典:平成29年度 春期 応用情報技術者試験 午前 問7(IPA)解説で登場
プログラムの特性に関する記述のうち,適切なものはどれか。
正解:再帰的プログラムは,手続の中でそれ自体を呼び出すプログラムであり,再入可能である。
要点:再帰的プログラムは必ず再入可能でなければならない
再帰的プログラムは実行中に自分自身を呼び出すため、呼出しごとに独立した作業領域を確保し、コード部分は書き換えない構造でなければ正しく動作しない。これは再入可能プログラムの条件そのものであり、再帰的プログラムは再入可能である。
出典:令和4年度 春期 応用情報技術者試験 午前 問6(IPA)
再入可能プログラムの特徴はどれか。
正解:複数のタスクからの呼出しに対して、並行して実行されても、それぞれのタスクに正しい結果を返す。
要点:再入可能は複数タスクの同時実行でも正しく動く性質
再入可能(リエントラント)プログラムとは、複数のタスクが同時に同じコードを実行しても、それぞれが正しい結果を得られるように作られたプログラムである。実現には、コード部分を書き換えないようにし、タスクごとに異なるデータ領域を使う設計が必要になる。これによりプログラムの実体を主記憶に1つ置くだけで複数タスクが共用できる。
出典・参考
公式シラバスの2 コンピュータシステム > 1. オペレーティングシステム > (13) プログラムの形態と性質に掲載されている用語です。
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。