#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
В.1) Всегда печатаются ненужные значения для первых двух значений. Почему это так? пожалуйста, поправьте меня, если что-то здесь не так.
Когда я изменил код, как показано ниже, он правильно печатает 1,2,3,4,5.
for(j=0;j<=4;j++)
{
pthread_join(p[j],(void **)&arg1[j]);
printf("\n%d",*arg1[j]);
}
В.2) каковы различные методы возврата значений из потока? Не могли бы вы суммировать все методы с примерами и объяснить, какому из них следует следовать?