gpt4 book ai didi

c - 为什么在 pthread_join 中 retval 是一个 void**?

转载 作者:行者123 更新时间:2023-12-01 23:16:33 24 4
gpt4 key购买 nike

我很难理解为什么 pthread_joinretval 参数是 void**。我已经阅读了联机帮助页并试图全神贯注,但我仍然无法完全理解它。我无法说服自己 retval 不能是 void*。有哪位大侠能赐教吗?

非常感谢您!

最佳答案

这是因为您应该将 void* 的地址提供给 pthread_joinpthread_join 然后会将 pthread_exit(void*) 提供的地址写入变量(您提供的地址是谁)。

示例场景:

typedef struct {
// members
} input_data;

typedef struct {
// members
} output_data;

起始线程端:

input_data id;
pthread_create(..., start_routine, &id);

void* start_routine(void *ptr) {
input_data *id = ptr;
output_data *od = malloc(sizeof *od);
// use the input data `id`, populate the output data `od`.
pthread_exit(od);
}

加入方:

output_data *od;
pthread_join((void**) &od);
// use `od`
free(od);

关于c - 为什么在 pthread_join 中 retval 是一个 void**?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68746525/

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