apache中initialized为什么先++或--再判断
这是apache的start.c里面的一段代码,这里面定义了一个initialized变量,因为是static类型也只有这两个函数可以操作这个变量。不管是init操作还是terminate操作,都是先改变了initialized的值再判断下一步的操作,这样就有个问题,如果不小心多次调用了init函数,但是terminate函数调用的次数比Init少,就会发生资源不释放的问题。都说apache的代码质量高,写成这样应该是有原因的吧。哪位大虾来说一下这个为什么要写成这样
static int initialized = 0;APR_DECLARE(apr_status_t) apr_initialize(void){ apr_pool_t *pool; apr_status_t status; if (initialized++) { return APR_SUCCESS; } #if !defined(BEOS) && !defined(OS2) apr_proc_mutex_unix_setup_lock(); apr_unix_setup_time();#endif if ((status = apr_pool_initialize()) != APR_SUCCESS) return status; if (apr_pool_create(&pool, NULL) != APR_SUCCESS) { return APR_ENOPOOL; } apr_pool_tag(pool, "apr_initialize"); /* apr_atomic_init() used to be called from here aswell. * Pools rely on mutexes though, which can be backed by * atomics. Due to this circular dependency * apr_pool_initialize() is taking care of calling * apr_atomic_init() at the correct time. */ apr_signal_init(pool); return APR_SUCCESS;}APR_DECLARE_NONSTD(void) apr_terminate(void){ initialized--; if (initialized) { return; } apr_pool_terminate(); }