2016-10-16 8 views
0

私は、ユーザ= (n)から数字を受け取り、1からnの合計を計算するスレッドを作成するプログラムを持っています。私は((n+1)*n)/2が私に同じ結果を与えることを知っています。プログラムを実行するとスレッドが作成されますが、'TotalSum'の値を要求すると、ユーザー入力に基づく計算の代わりに0が与えられます。なぜですか?私のpthreadの機能に誤りがあります

# 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

スレッドが終了するのをあなたのメインスレッドが待機していない、あなたは、スレッド関数に正しい引数を渡すされていません。

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を逆参照しているので)にあると想定しています。

関連する問題