Pthread返回结果

时间:2011-09-16 13:44:05

标签: c pthreads

我有一个关于从pthread执行函数返回结果的问题。

相关代码:

void* thread_func(void* args)
{
    float result = 0;
    // ...do something
    return (void*)&result;
}

// ... using code
float answer;
pthread_join(pthread_handle, &answer);

对我来说,这种解决方案似乎不应该安全地工作,因为result将驻留在thread_func的堆栈上,并且在thread_func返回后不再存在。然而,在我所做的所有测试中,它似乎完美无缺。有什么我误解为什么这是安全的吗?如果没有,我的测试恰好因为一些侥幸而工作,我如何安全地从thread_func安全地获得返回值?

1 个答案:

答案 0 :(得分:10)

这不安全。你只是幸运(或者说不幸运)。函数结束后,所有自动变量都会丢失(因此指向它们的指针是无用的)。

  • 使用malloc并返回该内存
  • 使用静态对象(例如全局变量)
  • 使用将加入的函数传递的内存

总之,使用一些在函数结束后仍然存活的内存。