再入可能プログラムとは、複数のスレッドやプロセスで同時に実行しても、予期せぬ動作やデータの破損を引き起こすことなく安全に実行できるプログラムです。再入可能コードは、副作用がなく、同時に実行されるコードの複数のインスタンスによって変更される可能性がある共有リソースやグローバル変数を回避するように設計されています。このため、再入可能コードは、同時実行が一般的なマルチスレッドやマルチプロセス環境において特に有用です。
再入可能コードは、複数のインスタンスからアクセスされ変更される可能性があり、データの破損や予測不可能な結果につながるグローバル変数や静的変数を使用してはいけません。
再入可能コードは、複数のスレッドやプロセスで実行されても正しく動作するように設計され、適切な同期とデータの一貫性を確保する必要があります。
再入可能コードは、共有リソースやデータの変更など、プログラムの他の部分に影響を与えるような副作用を持たないようにする必要があります。
C言語における再入可能関数の一例として、標準的な strtok()
関数の再入可能バージョンである strtok_r()
関数が挙げられます。 strtok()
関数は、文字列を指定された区切り文字に基づいてより小さな部分文字列に分割してトークン化するために使用されます。しかし、文字列の現在位置を格納するために静的変数を使用するため、マルチスレッドプログラムで使用するには安全ではありません。一方、 strtok_r()
関数は、現在位置を格納するための別のポインタをユーザーに提供する必要があり、各スレッドが独自のコンテキストを持つことを保証し、関数を再入可能にするものです。
要約すると、再入可能なプログラムや関数とは、複数のスレッドやプロセスで同時に実行しても、予期せぬ動作やデータの破損が起こらない安全なコードです。再入可能なコードは、共有リソース、グローバル変数、副作用を避けるように設計されており、マルチスレッドやマルチプロセス環境において特に有用です。