pthread_create erzeugt den Thread "joined"



  • Hallo Leute,

    habe hier ein kleines Problem. pthread_create erzuegt einen thread, der seine Arbeit auch verrichtet. Das Problem ist das der Calling-Thread stehen bleibt.
    Das sollte doch erste bei pthread_join passieren. Ich habe es auch im Terminal mit g++ probiert, aber der Fehler bleibt.
    Kann mir jemand weiterhelfen?

    Hier der Code:

    #include <stdio.h>
    #include <iostream>
    #include <pthread.h>
    
    using namespace std;
    
    void* work(void* data)
    {
        for(int i=0;i<1000;i++)
        {
            printf("hallo\n");
        }
    
        return data;
    }
    
    int main()
    {
        pthread_t thread1;
    
        int result = pthread_create( &thread1, NULL, &work, NULL );
        // bleibt stehen und printet 1000 mal hallo. dann weiter ?!?!?!
    
        if(result != 0)
        {
             printf("fehler");
        }
    
        printf("----------------------------------------------------------------");
    
        int input;
        cin >> input;
        return 0;
    }
    


  • Also das Programm läuft und tut auch was es soll, bei mir zumindest.
    Es werden die Ausgaben gegeben, also deine 1000 hallos, dann irgendwann mal die linie und dann wartet er auf ne Eingabe.
    Sobald der stehen bleibt gib ihm ne Zahl, Enter und fertig.

    Da du gar kein join hast, wird der thread auch nicht beendet, sondern schläft, bis das Programm zu Ende ist.

    Sag doch nochmal ganz genau, was du meinst.



  • Hallo, danke für die Antwort. Mein Problem bei der Sache ist, das die 1000 Hallos
    rausgeschrieben werden, und DANN ERST der Strich gezeichnet wird.
    Auch wenn ich seperat Threads danach erzeuge, die einen anderen Text ausgeben, arbeitet er jeden Thread nacheinander ab. Da ist nichts mit parallel.
    Die ausgabe sieht dann so aus:

    hallo
    hallo
    hallo
    hallo
    1000.

    wald
    wald
    wald
    wald
    1000.

    --------------------------

    Dabei sollte sie durch threading so aussehen:

    hallo
    wald
    hallo
    ---------------------------
    hallo
    wald wald
    2000.

    Oder nicht?

    gruß fab



  • bau doch mal ein schlafen für 100ms in deinen thread ein, ich denke dann hast du das erwünschte. 1000mal hallo gibt er vllt innerhalb einer zugeteilten zeitscheibe schon aus.



  • Das ist das lustige an Threads. Du weißt nie genau wann was passieren wird 😉
    Und auf keinen Fall wird das so gemixt aussehen, wie du erwartest, dazu sind die Rechenzeitfenster zu groß, bzw ein print zu schnell

    Hast du ne Single-Core CPU?


Anmelden zum Antworten