Cでcuuxをスポークするライブラリを構築しているとしましょう。
Quuxを正常にスポークするには、次の2つの状態変数が必要です。
static int quux_state;
static char* quux_address;
/* function to spork quuxes found in a file,
reads a line from the file each time it's called. */
void spork_quux(FILE*);
そのデータをグローバル変数として保存すると、一度に1つのクライアントのみがキューをスポークできます。そうしないと、状態変数が2番目の呼び出し元によって破壊され、災害が発生する可能性があります。
問題は、Cでリエントラントライブラリを設計するための最良の方法は何ですか?
私は以下のケースを楽しませましたが、満足のいく結論には至りませんでした。
次の場合、問題はクライアントを各状態に関連付ける方法です。
/* library handles all state data allocation */
static int* quux_state;
static char** quux_address;
次の場合、クライアントは状態を混乱させる可能性があり、非常に望ましくありません
/* let each client store state */
typedef struct { int state; char* address; } QuuxState;
QuuxState spork_quux(FILE*);
では、これを適切に行う方法は?