我的pthread函数出错

时间:2016-10-16 08:04:45

标签: c pthreads

我有一个程序,它接受一个来自用户= (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

1 个答案:

答案 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()时)。