#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) 它总是打印前两个值的垃圾值。为什么会这样?如果这里有什么问题,请纠正我。
当我更改如下代码时,它会正确打印 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) 从线程返回值的不同方法是什么?您能否通过示例总结所有方法并解释要遵循哪一种方法?