从线程返回结果
转换为 void *
的具体数据类型的指针可用于将值传递给线程函数并返回结果。
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
struct thread_args
{
int a;
double b;
};
struct thread_result
{
long x;
double y;
};
void *thread_func(void *args_void)
{
struct thread_args *args = args_void;
/* The thread cannot return a pointer to a local variable */
struct thread_result *res = malloc(sizeof *res);
res->x = 10 + args->a;
res->y = args->a * args->b;
return res;
}
int main()
{
pthread_t threadL;
struct thread_args in = { .a = 10, .b = 3.141592653 };
void *out_void;
struct thread_result *out;
pthread_create(&threadL, NULL, thread_func, &in);
pthread_join(threadL, &out_void);
out = out_void;
printf("out -> x = %ld\tout -> b = %f\n", out->x, out->y);
free(out);
return 0;
}
在许多情况下,不必以这种方式传递返回值 - 例如,参数 struct 中的空格也可用于返回结果,或者指向共享数据结构的指针可以传递给线程并且结果存储在那里。