gpt4 book ai didi

c - 为什么 pthread_join() 的第二个参数是一个 **,一个指向指针的指针?

转载 作者:太空狗 更新时间:2023-10-29 16:55:59 33 4
gpt4 key购买 nike

我是 pthread 的新手,也不熟悉指向指针的指针。有人可以解释为什么 pthread_join() 的第二个参数是 void **。为什么要这样设计。

int pthread_join(pthread_t thread, void **value_ptr);

最佳答案

要通过函数的参数返回一个值,您需要传入变量的地址以接收新值。

作为pthread_join()旨在接收传递给 pthread_exit() 的指针值, 这是一个 void*, pthread_join()期望 void* 的地址,它实际上是 void** 类型。

例子:

#include <stdlib.h> /* for EXIT_xxx macros */
#include <stdio.h> /* for printf() and perror() */
#include <pthread.h>

void * tf(void * pv)
{
int * a = pv;
size_t index = 0;

printf("tf(): a[%zu] = %d\n", index , a[index]);

++index;

pthread_exit(a + index); /* Return from tf() the address of a's 2nd element.
a + 1 here is equivalent to &a[1]. */
}


int main(void)
{
int a[2] = {42, 43};
pthread_t pt;
int result = pthread_create(&pt, NULL, tf, a); /* Pass to tf() the address of
a's 1st element. a decays to
something equivalent to &a[0]. */
if (0 != result)
{
perror("pthread_create() failed");
exit(EXIT_FAILURE);
}

{
int * pi;
size_t index = 0;

{
void * pv;
result = pthread_join(pt, &pv); /* Pass in the address of a pointer-variable
pointing to where the value passed to
pthread_exit() should be written. */
if (0 != result)
{
perror("pthread_join() failed");
exit(EXIT_FAILURE);
}

pi = pv;
}

++index;

printf("main(): a[%zu] = %d\n", index, pi[0]);
}

return EXIT_SUCCESS;
}

上面的程序应该打印:

tf(): a[0] = 42
main(): a[1] = 43

关于c - 为什么 pthread_join() 的第二个参数是一个 **,一个指向指针的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47222124/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com