我有多个线程执行以下代码。
alloc_global_ctx()
{
if (global ctx is not allocated) {
global ctx = calloc(1, sizeof(global ctx));
}
return global ctx;
}
once_routine()
{
….
alloc_global_ctx()
….
}
init_routine()
{
Take init_mutex;
Call pthread_once(once_variable, once_routine);
alloc_global_ctx();
….
Release init_mutex;
}
当我的程序执行init_routine
时(2个线程调用init_routine
),我预计全局ctx
将由执行once_routine
的线程分配。但是,从调试日志中,我发现大多数时候,运行once_routine
的线程和线程分配全局变量是不同的。这是预期的吗?当一个线程正在执行pthread_once
时,它是否会释放init_mutex
?