我有一个程序,它接受一个来自用户= (n)
的数字,并创建一个线程来计算从1到n的总和。我知道((n+1)*n)/2
会给我相同的结果。当我运行程序时,会创建一个线程但是当我要求'TotalSum'
的值时,会给出0代替基于用户输入的计算,为什么?
# include <stdio.h>
# include <pthread.h>
void * thread_calc(void *);
int TotalSum=0;
int main()
{
int iNumber,iCount;
pthread_t tid, tid2;
printf("Enter Number Up to Which You want to Sum :");
scanf("%d",&iNumber);
pthread_create(&tid,NULL,thread_calc,(void *) iNumber);
//pthread_create(&tid2,NULL,thread_calc,(void *)(iNumber+);
printf("Thread %d running, Final Sum is : %d \n", tid,TotalSum);
//printf("Thread %d running, Final Sum is : %d \n", tid2,TotalSum);
// return 0;
}
void *thread_calc(void *num)
{
int *iNumber;
iNumber=(int*)num;
TotalSum = ((*iNumber + 1)* (*iNumber))/2;
pthread_exit(NULL);
}
我的输出:(例如,用户输入10)
Enter Number Up to Which You want to Sum :10
Thread 536937120 running, Final Sum is : 0
答案 0 :(得分:0)
你的主线程没有等待线程完成,你没有将正确的参数传递给线程函数:
pthread_create(&tid, NULL,thread_calc, &iNumber); //pass the address of iNumber
pthread_join(tid, NULL); // main thread waits for the thread_calc to return
当主线程退出整个进程死亡时。因此,您需要等待线程返回pthread_join()
。
您将iNumber
本身作为指针值传递给线程函数。但是线程函数实际上期望它的参数是
指针(当您取消引用iNumber
中的thread_calc()
时)。