2016-04-03 8 views
-2
#include<stdio.h> 
#include<unistd.h> 
#include<pthread.h> 

void* func(void*); 

int main() 
{ 
    int numb = 0; 
    pthread_t pid; 
    pthread_attr_t attr; 
    pthread_attr_init(&attr); 

    pthread_create(&pid, &attr, func, (void*)&numb);  
    printf("%s%d\n", "Number: ", numb); 

    return 0; 
} 

//..............defintation............... 

void* func(void* data) 
{ 
    int* numb = (int*)data; 
    *numb = 1000; 
} 

Ich möchte die Nummer als Referenz an die Funktion "func" übergeben. Ich tat dies, indem ich die Adresse der Zahl "(void *) & taub" übergab. Ich änderte den Wert auf 1000 in der Funktion und druckte den Wert in Haupt, aber der Ausgang ist 0 anstelle von 1000.Wert als Referenz in Pthread übergeben

Danke !!!

+1

Sie haben eine Race Condition - und 'main' gewann –

+0

@EdHeal: Bitte schreiben Sie keine Antworten in Kommentare. Kommentare unterliegen nicht der üblichen Aufsicht über den Antwortbereich: Downvotes, Representation, Reviews, Änderungsvorschläge, Bounties, Beitrag zur Fragenverwaltung (Regeln zu einigen Dingen, die bei Fragen auftreten können, hängen davon ab, ob eine Antwort vorliegt) usw. _Answers gehören im Antwortbereich. NUR._ –

+0

@BarryTheHatchet - Ich glaube nicht, dass mein Kommentar als Antwort gerechtfertigt werden kann - aber du bekommst +1, wenn du das für mich tust –

Antwort

3

Dies ist eine klassische Race-Bedingung.

Ihr Computer kam zu dem printf in Haupt, bevor es zu *numb = 1000 in func kam.

Sie benötigen eine Zustandsvariable oder eine andere Form des Parallelitätsprimitivs, um den Zugriff auf dieses Datum zu synchronisieren.

Dies sind die Grundlagen der Multithread-Programmierung, daher sollten Sie ein Buch zum Thema lesen und nicht raten.