我无法理解为什么pthread_join
作为返回值的第二个参数void**
,而给定返回值的pthread_exit
的返回值参数为{ {1}}。
答案 0 :(得分:4)
pthread_join等待线程结束,并将pthread_exit的结果值存储到* value_ptr中。如果要忽略结果,可以为value_ptr传递NULL。这是通过将指针传递给变量来模拟传递引用的常见C实践。见Passing by reference in C
pthread_join在成功时返回0作为函数返回值;然后你知道线程已经加入,你可以从* value_ptr。
访问该值void *value = NULL;
if (pthread_join(thread, &value) == 0) {
// thread has ended, and the exit value is available in
// the value variable
}
答案 1 :(得分:2)
基本上,pthread_join()
想要返回两个信息:
void*
)在C中,函数“返回”两个单独值的典型方法是让函数正常返回其中一个值,并在调用者传入指针的调用者提供的位置“返回”其他值。到那个地方。所以pthread_join()
:
void*
结果返回到呼叫者提供的位置,呼叫者将void**
传递给该位置。 请注意,在pthread_join()
的情况下,来电者提供的位置是可选的。 NULL可以在id中传递,调用者对该结果不感兴趣。使呼叫者提供的位置可选是一种常见的,绝不是普遍的习惯用法。
pthread_exit()
不需要使用void**
作为参数,因为该参数不是函数的结果。所以它可以直接取值。