如何解决将返回值从一个线程传递到另一个线程
我正在学习posix线程编程,并且在下面的程序中苦苦挣扎。所以我有2个具有ID的线程:tid1和tid2。我将线程与tid1一起使用,将要相互求和的值输入到tid2的第二个线程中,但是总和的结果不正确。因此,我尝试在tid2中显示我在tid1中输入的值,但我意识到这些值也不正确(与输入的值不对应)。您能告诉我我在哪里出错吗?我将从tid1线程返回的指针传递给tid2线程的方式,对吗?
注意:从tid1返回的值已经正确,因为我检查了它,就像您在主窗口中看到的那样(第56行)。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
void *entryValues(void *p)
{
int nbVal = *(int*)p;
int i = 0;
int val = 0;
int *tab;
while(i < nbVal){
printf("value %d: ",i);
scanf("%d",&val);
tab[i] = val;
i++;
}
pthread_exit(tab);
}
void *sumValues(void *p)
{
int *values;
int sum = 0,i = 0;
memcpy(values,(int*)p,sizeof((int*)p));
printf("%d\n",values[0]);
for (i = 0; i < sizeof(values); i++)
{
//printf("value %d: %d\n",i,values[i]);
sum += values[i];
}
printf("The sum of the entered values is: %d\n",sum);
return NULL;
}
int main(int argc,char **argv)
{
pthread_t tid1;
pthread_t tid2;
int nbValues = 0;
int *arr;
printf("Please enter the number of values you want to sum each other: ");
scanf("%d",&nbValues);
if(pthread_create(&tid1,NULL,entryValues,&nbValues)!= 0)
{
fprintf(stderr,"creation of thread failed\n");
return -1;
}
pthread_join(tid1,(void**)&arr);
//printf("array: %d\n",arr[0]);
if(pthread_create(&tid2,sumValues,arr) != 0)
{
fprintf(stderr,"creation of thread failed\n");
return -1;
}
pthread_join(tid2,NULL);
/* Waiting for the termination of tid */
printf("End of main thread\n");
return EXIT_SUCCESS;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。