リエントラント
リエントラント(reentrant, re-entrant、再入可能)
リエントラント(再入可能)であると複数のタスクから同時に処理を実行したときに、それぞれのタスクが期待する処理をできるような性質
リエントラントな場合、グローバル変数や静的変数を持たない
静的変数はC言語だとstaticの変数がついたやつ
再入可能で備えておかないといけない性質は、
コード領域は各タスクで共用
データ領域は各タスクごとに持つ
「コード領域は各タスクで共用」、「データ領域は各タスクごとに持つ」がどういう例あるかというと以下のようなものがそうらしい
コード領域
関数やメソッドの命令コード(例えば、四則演算や文字列の連結)
共有ライブラリの関数(例えば、C言語のstrcpyやmemcpy)
データ領域
各タスクが保持するローカル変数
スタック上に確保される関数の引数や一時変数
スレッドローカルストレージに保存される変数
POSIXの*_rで終わる関数はリエントラントの性質を持つ C標準ライブラリで↓のページにある_exit()、abort()、read()、write()などは非同期安全な関数 確認用
Q. リエントラント
関連
調査用
Wikipedia.icon
Wikipedia.icon
メモ
リエントラント(英: reentrant / re-entrant、再入可能)およびリエントランシー(英: reentrancy / re-entrancy、再入可能性)とは、あるプログラムやサブルーチンの実行を完了する前に、割り込みなどにより、同じプログラムやサブルーチンを実行しても安全だという性質を指す。割り込みは分岐や呼び出しなどの内部的な動きによって生じる場合もあるし、ハードウェア割り込みやシグナルなどの外部の動きによって生じる場合もある。割り込みの実行を完了後に、割り込み前の実行に影響を与えずに継続できる。
リエントラントなコードは、静的変数やグローバル変数を保持しない。
リエントラントなコードは自分のコードを書き換えない。
リエントラントなコードは、リエントラントでないプログラムやサブルーチンを呼び出さない。