pthread_exit发出返回结构

Qui*_*ion 0 c multithreading pthreads pthread-join

我有一个结构

typedef struct something_t {
    int a;
    int b;
} VALUES;
Run Code Online (Sandbox Code Playgroud)

在我的线程函数中我做

VALUES values;
values.a = 10;
values.b = 11;

pthread_exit((void*)&values);
Run Code Online (Sandbox Code Playgroud)

我试着通过这样做来接受

VALUES values;
pthread_join(thread, (void*)&values);
printf("A: %d\B: %d\n", values.a, values.b);
Run Code Online (Sandbox Code Playgroud)

我收到的价值每次都很奇怪.我很困惑如何接收我最终在线程中创建的值.我试图在C中学习线程,似乎我已经掌握了它,但我无法返回值.有办法吗?感谢任何人的帮助.

per*_*erh 5

您正在尝试返回堆栈(本地)变量.

这是不允许的,并且不起作用,因为线程的堆栈将在线程退出时被删除(或者至少是无效的).

解决这个问题:

VALUES *values = malloc(sizeof VALUES);
values->a = 1;
values->b = 2;
pthread_exit( values );
Run Code Online (Sandbox Code Playgroud)

然后,当你加入免费的价值观

VALUES *res;
pthread_join( thread, &res );
...
free(res);
Run Code Online (Sandbox Code Playgroud)