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

标签 c pthreads pthread-join

我很难理解为什么 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/

相关文章:

Codeforces 输出不同的东西

C sscanf 和字符串格式

c - 如果线程在调用 pthread_mutex_lock() 时没有成功,会发生什么情况?

c++ - 一个简单的 pthread_create 在 Qt 中导致 100% 的 CPU 使用率

c - C 中的 Pthread 加入?

c - pthread_detach 不会改变任何东西

c - 语法错误: expected declaration at end of input

c - 使用 windows.h 在 Visual Studio 中进行串行通信

c++ - linux下如何运行ps调试多线程程序?

c - 为什么 pthread_join 在最后一次迭代中失败(给出段错误)?