Wie bekomme ich den Fehler code aus pthread_join

Den folgenden code nicht erstellen pthreads beitreten und die Meldung "verbinden fehlgeschlagen" ausgegeben. Wie bekomme ich weitere Informationen über den Fehler und die Ursache?

pthread_t aThread[MAX_LENGTH];
    int errCode[MAX_LENGTH];
    char returnVal;    
for(int i = 0; i < MAX_LENGTH; i++)
    {

        if((errCode[i] = pthread_create(&aThread[i], NULL, &findMatch, &fpArgs)) != 0)
            printf("error creating thread %d\n", errCode[i]);
        if(!pthread_join(aThread[i], (void**)&returnVal))
            printf("join failed\n i is %d", i);
    }

EDIT: tatsächlich join zurückgegeben no error und ich habe einen Fehler gemacht. Die if-Anweisung sollten nicht den ! weil join gibt eine Zahl ungleich null, wenn es ein problem gibt, die zu true ausgewertet wird.

  • Ihre Besetzung Ihrer returnVal - Adresse ein void** undefined behavior. Es sei denn sizeof(char) == sizeof(void*) auf Ihrem system (was kann ich alles-aber-Garantie-Sie ist es nicht), das Es nicht so Aussehen, wie Sie verwenden es trotzdem, und NULL ist eine praktikable option, so können Sie eher nur pthread_join(aThread[i], NULL); Weiter pthread_join gibt null (0) ein Erfolg, so testen Sie es für Fehler mit ! ist Rückschritt. Schließlich wollen Sie nicht zu tun es auf diese Weise jedenfalls, den Sie starten möchten Sie alle, dann kommen Sie alle. Was Sie hier haben, ist buchstäblich kein Stück besser als single-threaded.
InformationsquelleAutor Celeritas | 2013-10-10
Schreibe einen Kommentar