【问题标题】:use of pointer to pointer in pthread_join function在 pthread_join 函数中使用指向指针的指针
【发布时间】:2014-12-01 16:23:07
【问题描述】:
int pthread_join(pthread_t thread, void **retval);

根据手册页 pthread_join 应该使用指向指针的指针作为参数来存储返回值。我不明白为什么它是这样设计的。在其中使用指针变量就足够了吗?

【问题讨论】:

  • 你不理解它并不意味着如果你不遵循函数的规范它就可以工作。
  • 它接收你从你的线程进程返回的指针(它有一个void* 结果)。该值必须存储在某处pthread_join 结果将是候选结果,但它用于传达函数成功/失败结果。因此,一个out-param诞生了。作为 C 中的一个输出参数,它以地址的形式提供目标,从而提供指向指针的指针。
  • 它是这样设计的,以便线程可以将 void* 存储在线程执行时不会消失的地方。

标签: c pthreads pthread-join


【解决方案1】:

如果我清楚地理解了您的问题.. 你应该这样使用..

pthread_t a_thread;
void *thread_result;
pthread_join(a_thread, &thread_result);

【讨论】:

  • 缺少的一点是返回值一个void *;它实际上不需要指向任何东西,因为它是一个不透明的指针。
【解决方案2】:

您传递给pthread_create 的启动例程返回一个Foobar 类型的值。我不知道Foobar 是什么,但是如果你想在pthread_join 中捕获那个值,你必须传入一个Foobar*

现在当我查看pthread_create 文档时,我发现Foobar 实际上是void*。因此pthread_join 应该接受void**

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    相关资源
    最近更新 更多