pthread_once和互斥锁

时间:2014-09-22 13:30:43

标签: c multithreading

我有多个线程执行以下代码。

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

0 个答案:

没有答案