我很难理解为什么 pthread_join
的 retval
参数是 void**
。我已经阅读了联机帮助页并试图全神贯注,但我仍然无法完全理解它。我无法说服自己 retval
不能是 void*
。有哪位大侠能赐教吗?
非常感谢您!
最佳答案
这是因为您应该将 void*
的地址提供给 pthread_join
。
pthread_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/