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 ポインターを返さなければならないと思っていたので、これらの警告が表示される理由がわかりません。正直なところ、これが機能している理由もわかりません。
これは、私が作成しようとしている別のプログラムを完成させることができるように、作業を開始しようとしている簡単な例です。このプログラムには、スレッドの配列があり、それぞれが単一の float 値を計算します。 、および pthread_exit と pthread_join を使用して、これらの計算された値のそれぞれを float の配列に格納したいのですが、pthread_join からの値を配列に格納する方法がよくわかりません。