我试图获得从 pthread 返回值并捕获该值的概念,但我无法理解发生了什么或如何使其工作。我有一个创建单个线程的简单程序,该线程以 int 值 100 退出,然后我尝试使用 pthread_join 捕获该值:
#include <stdio.h>
#include <pthread.h>
void *doStuff(void *param) {
int a = 100;
pthread_exit(a);
}
void main() {
pthread_t thread;
int a;
pthread_create(&thread, NULL, doStuff, NULL);
pthread_join(thread, &a);
printf("%d\n", a);
}
它可以工作,但会引发一些警告:
./teste.c: In function ‘doStuff’:
./teste.c:7:2: warning: passing argument 1 of ‘pthread_exit’ makes pointer from integer without a cast [enabled by default]
In file included from ./teste.c:2:0:
/usr/include/pthread.h:241:13: note: expected ‘void *’ but argument is of type ‘int’
./teste.c: In function ‘main’:
./teste.c:17:2: warning: passing argument 2 of ‘pthread_join’ from incompatible pointer type [enabled by default]
In file included from ./teste.c:2:0:
/usr/include/pthread.h:249:12: note: expected ‘void **’ but argument is of type ‘int *’
我不明白为什么我会收到这些警告,老实说我也不明白为什么这会起作用,因为我认为我必须在 pthread_exit 上返回一个 void 指针。
这是一个简单的示例,我正在尝试开始工作,以便能够完成我正在尝试创建的另一个程序,其中我将有一个线程数组,每个线程都计算一个浮点值,并且我想使用 pthread_exit 和 pthread_join 将这些计算值中的每一个存储到一个浮点数组中,但我真的不知道如何将 pthread_join 中的值存储到一个数组中。