2016-10-16 3 views
0

私はこのプログラムを使って、1からnまでの合計を計算するための数値をユーザ入力に求めます。 。私は2番目のスレッドを1からn + 1、3番目のスレッドを1からn + 2まで計算する方法を見つけようとしています。私は入力を与えられたユーザの合計を計算するためにさらにスレッドを作成したい

# include <stdio.h> 
# include <pthread.h> 

void * thread_sum(void *); 
int TotalSum=0; 
pthread_mutex_t mVar=PTHREAD_MUTEX_INITIALIZER; 

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_sum,(void *)&iNumber); 
    pthread_create(&tid2,NULL,thread_sum,(void *)&iNumber); 
    for(iCount=1;iCount<=iNumber;iCount=iCount+2) 
    { 
     pthread_mutex_lock(&mVar); 
     TotalSum=TotalSum + iCount; 
     pthread_mutex_unlock(&mVar); 
    } 

    pthread_join(tid,NULL); 

    printf("Thread %d running, Final Sum is : %d \n", tid,TotalSum); 

} 
void *thread_sum(void *no) 
{ 
    int *iNumber,iCount, res; 
    iNumber=(int*)no; 

    for(iCount=2;iCount<=*iNumber;iCount=iCount+2) 
    { 
     pthread_mutex_lock(&mVar); 
     TotalSum=TotalSum + iCount; 
     pthread_mutex_unlock(&mVar); 
    } 
    pthread_exit(NULL);  
} 
+0

を助けた希望* n)/ 2' – selbie

+0

スレッドや「おもちゃ」の例を真剣に使用することを意図していますか? – duskwuff

+0

@duskwuffおもちゃの例 –

答えて

0

iNumberのアドレスでthread_sumを呼び出す代わりに、計算する要素の数を送信できます。

その後、
pthread_create(&tid,NULL,thread_sum,(void *)(iNumber+1)); 
pthread_create(&tid2,NULL,thread_sum,(void *)(iNumber+2)); 

とthread_sumでそれを使用します。

void *thread_sum(void *no) 
{ 
    int *iNumber,iCount, res; 
    iNumber=(int)no; 

    for(iCount=2;iCount<=iNumber;iCount=iCount+2) 

私は)あなたは `[1..nの]`( `である(n + 1個の合計ことを実現します

+0

私はそれを試みましたが、セグメンテーションフォルトを持っていました –

+0

iNumber(forループ内)から*を削除しました。これは現在ポインタとしてではなく整数として使用されています。今すぐやってみて下さい。 –

関連する問題