我想知道pthread_join中的“status”参数到底是什么
int pthread_join(pthread_t thread, void **status);
我正在尝试使用它,但我无法理解它究竟代表什么。 根据文件
状态
Is the location where the exit status of the joined thread is stored.
如果退出,则可以设置为NULL 状态不是必需的。
行。听起来很棒。我该如何使用它?我看了一些例子,但我做不到 得到它的悬念(一些例子在使用它时是完全错误的)。所以我确实去了 来源。在glibc实现中,我找到了pthread_join的以下测试:
...
pthread_t mh = (pthread_t) arg;
void *result;
...
if (pthread_join (mh, &result) != 0)
{
puts ("join failed");
exit (1);
}
here follows the WTF moment ...
if (result != (void *) 42l)
{
printf ("result wrong: expected %p, got %p\n", (void *) 42, result);
exit (1);
}
所以结果的值(这是一个地址)应该是42?这是全球性的吗? 在图书馆一级,因为我在test找不到具体的内容?
编辑:似乎this question提供了与我所问的相关的信息
答案 0 :(得分:4)
状态设置为线程开始执行的函数返回的值(或者如果线程提前退出,则从传递给pthread_exit()的值返回)。
示例:
void* thread_func(void* data)
{
if (fail())
{
pthread_exit((void*)new int(2)); // pointer to int(2) returned to status
}
return (void*)new int(1); // pointer to int(1) returned to status;
// Note: I am not advocating this is a good idea.
// Just trying to explain what happens.
}
pthread_create(&thread, NULL, thread_func, NULL);
void* status;
pthread_join(thread, &status);
int* st = (int*)status;
// Here status is a pointer to memory returned from thread_func()
if ((*st) == 1)
{
// It worked.
}
if ((*st) == 2)
{
// It Failed.
}
答案 1 :(得分:1)
阅读pthread_create
的文档。运行线程的函数被定义为返回void*
。无论它返回什么,pthread_join
都会通过void**
传递给您。如果函数选择返回(void *)42
,那么'42'就是你得到的。