Threads abwechselnd laufen lassen mit Mutex und Condition Variablen



  • Hallo Leute,

    Ich habe eine kleine Programmieraufgabe (über die Sinnhaftigkeit in der Praxis lässt sich streiten, aber die Aufgabe ist nunmal so vorgegeben).

    Und zwar sollen zwei Threads immer abwechselnd laufen, und jedes Mal eine eigene lokale Variable hochzählen und ausgeben.
    Ich habe schon einen Ansatz, der aber ziemlich schnell zu einem Deadlock führt, was ich mir aber leider nicht erklären kann. Von der Idee her sieht der Code bisher so aus:

    void thread_one()
    {
        int count = 0;
        while (1)
        {
            mutex_lock();
            cond_wait(&cond_two, &mutex);
            printf("%d", count++);
            cond_signal(&cond_one);
            mutex_unlock();
        }
    }
    
    void thread_two()
    {
        int count = 0;
        sleep(1);
        while (1)
        {
            mutex_lock();
            cond_wait(&cond_one, &mutex);
            printf("%d", count++);
            cond_signal(&cond_two);
            mutex_unlock();
        }
    }
    
    int main()
    {
        pthread_create(thread_one);
        pthread_create(thread_two);
        cond_signal(&cond_two);
    }
    

    Was ist denn daran falsch, und was kann ich ändern damit das funktioniert? 😕

    Danke und liebe Grüße!



  • Stichwort spurious wakeup .
    Du musst pthread_cond_wait in einer Schleife aufrufen, z.B. auf eine globale Variable mit Boolean Charakter.


Anmelden zum Antworten