Я написал модуль для HTTP-сервера Apache и обнаружил странное поведение.Я предположил, что статические переменные инициализируются только один раз, но я написал приведенный ниже код и сделал два запроса к Apache, вывод был:
test_handler: isInit=0
test_handler: isInit=1
test_handlere: isInit=0
test_handlere: isInit=1
Код теста:
static int isInit = 0;
static int test_handler( request_rec *r ) {
fprintf(stderr,"\n\natest_handler: isInit=%d", isInit );
if( !isInit ) {
isInit = 1;
}
fprintf(stderr,"\natest_handler: isInit=%d", isInit );
fflush(stderr);
return DECLINED;
}
static void register_hooks(apr_pool_t *p) {
fprintf(stdout,"register_hooks\n");
ap_hook_translate_name(test_handler, NULL, NULL, APR_HOOK_FIRST);
fprintf(stdout,"register_hooks done\n");
}
module AP_MODULE_DECLARE_DATA test_module = {
STANDARD20_MODULE_STUFF,
NULL, /* create per-dir config structures */
NULL, /* merge per-dir config structures */
NULL, /* create per-server config structures */
NULL, /* merge per-server config structures */
NULL, /* table of config file commands */
register_hooks /* register hooks */
};
Проблема связана с потоками, так как, когда я делаю 10 запросов к Apache, я вижу isInit=1, isInit=1
в некоторых случаях и isInit=0, isInit=1
в других.
У меня такой вопрос, как я могу определить переменную, чтобудет доступен в test_handler()
и сохранит свое значение между вызовами функции?