2016-10-16 2 views
0

Ich habe dieses Programm, das nach Benutzereingabe fragt, um eine Zahl zu geben, um die Summe von 1 bis n (n ist die Benutzereingabezahl) zu berechnen . Ich versuche herauszufinden, wie ich einen zweiten Thread berechnen könnte 1 bis n + 1, einen dritten Thread, um 1 bis n + 2 und so weiter zu berechnen.Ich möchte mehr Threads erstellen, um die Summe einer vom Benutzer angegebenen Eingabe zu berechnen

# 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

Sie erkennen, dass die Summe von '[1..n]' ist '((n + 1) * n)/2' – selbie

+0

Ist dies eine ernsthafte Verwendung von Threads oder ein "Spielzeug" -Beispiel? – duskwuff

+0

@duskwuff ein Spielzeug-Beispiel –

Antwort

0

Statt Aufruf thread_sum mit der Adresse iNumber, können Sie die Anzahl der Elemente, die Sie berechnen möchten senden.

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

und verwenden sie dann in thread_sum:

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

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

Hoffe, dass ich geholfen

+0

Ich habe das versucht, aber ich habe eine Segmentierung Fehler –

+0

Bearbeitet und entfernt * von iNumber (in der for-Schleife), wie es jetzt als Integer und nicht als Zeiger verwendet wird. Versuche es jetzt. –

Verwandte Themen