假设我正在构建一个库来在 C 中使用 quuxes。
Quuxes 需要两个状态变量才能成功触发:
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*);
如果我将该数据存储为全局变量,那么一次只有一个客户端能够触发 quux,否则状态变量将被第二个调用者破坏,并且可能会发生灾难。
问题是用 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*);
那么,如何正确地做到这一点呢?