【发布时间】:2020-06-12 18:43:57
【问题描述】:
我正在学习操作系统中的 C 线程。我不知道为什么下面的代码给了我分段错误。有人能帮我一下吗?我也对pthread_join 如何使用它的论点void ** retval 感到有些困惑。它的作用是什么?
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
void *thread (void *vargp) {
int* arg = *((int*)vargp);
return (void*)arg;
}
int main () {
pthread_t tid;
int thread_arg = 0xDEADBEEF;
int *ret_value;
pthread_create(&tid, NULL, thread, &thread_arg);
pthread_join(tid, (void **)(&ret_value));
printf("%X\n", *ret_value);
return 0;
}
【问题讨论】:
-
线程应该调用
pthread_exit()来传递返回值。 -
@Barmar 也可以从线程函数中返回。
-
...毕竟,这就是为什么线程函数所需的签名声明它返回
void *。
标签: c operating-system pthreads