#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
void * function(void *);
main()
{
pthread_t p[5];
int j;
int *arg1[4];
int arr[5]={1,2,3,4,5};
for(j=0;j<=4;j++)
pthread_create(&p[j],NULL,function,&arr[j]);
for(j=0;j<=4;j++)
pthread_join(p[j],(void **)&arg1[j]);
for(j=0;j<=4;j++)
printf("\n%d",*arg1[j]);
}
void * function(void *arg)
{
int *i = (int *) arg;
pthread_exit(i);
}
Output:
-1498551536
32767
3
4
5
Q.1) 最初の 2 つの値に対して常にジャンク値が出力されます。なぜそうなのですか?ここで何か間違っている場合は修正してください。
以下のようにコードを変更すると、1,2,3,4,5 が正しく出力されます。
for(j=0;j<=4;j++)
{
pthread_join(p[j],(void **)&arg1[j]);
printf("\n%d",*arg1[j]);
}
Q.2) スレッドから値を返すさまざまな方法は何ですか? すべての方法を例を挙げて要約し、どの方法に従うべきかを説明していただけますか?