Да кажем, че изграждам библиотека, за да създавам quux в C.
Quux се нуждаят от две променливи на състоянието, за да бъдат задействани успешно:
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*);
И така, как да направите това правилно?