pthread_cond_wait por 2 hilos

Estoy tratando de implementarpthread_cond_wait Para 2 hilos. Mi código de prueba está intentando usar dos subprocesos para realizar el siguiente escenario:

El hilo B espera la condiciónEl hilo A imprime "Hola" cinco vecesEl hilo A señala al hilo BEl hilo A esperaEl hilo B imprime "Adiós"El hilo B señala el hilo ALoop para empezar (x5)

Hasta ahora, el código se imprime "Hola" cinco veces y luego se atasca. Por los ejemplos que he visto, parece que estoy en el camino correcto, "Bloquear mutex, esperar, ser señalado por otro hilo, desbloquear mutex, hacer cosas, hacer un bucle"

Código de prueba:

//Import 
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>

//global variables
pthread_cond_t      condA  = PTHREAD_COND_INITIALIZER;
pthread_cond_t      condB  = PTHREAD_COND_INITIALIZER;
pthread_mutex_t     mutex = PTHREAD_MUTEX_INITIALIZER;




void *threadA()
{
    int i = 0, rValue, loopNum;

    while(i<5)
    {
        //unlock mutex
        rValue = pthread_mutex_unlock(&mutex);

        //do stuff
        for(loopNum = 1; loopNum <= 5; loopNum++)
            printf("Hello %d\n", loopNum);

        //signal condition of thread b
        rValue = pthread_cond_signal(&condB);

        //lock mutex
        rValue = pthread_mutex_lock(&mutex);

        //wait for turn
        while( pthread_cond_wait(&condA, &mutex) != 0 )

        i++;
    }

}



void *threadB()
{
    int n = 0, rValue;

    while(n<5)
    {
        //lock mutex
        rValue = pthread_mutex_lock(&mutex);

        //wait for turn
        while( pthread_cond_wait(&condB, &mutex) != 0 )

        //unlock mutex
        rValue = pthread_mutex_unlock(&mutex);

        //do stuff
        printf("Goodbye");

        //signal condition a
        rValue = pthread_cond_signal(&condA);

        n++;        
    }
}




int main(int argc, char *argv[])
{
    //create our threads
    pthread_t a, b;

    pthread_create(&a, NULL, threadA, NULL);
    pthread_create(&b, NULL, threadB, NULL);

    pthread_join(a, NULL);
    pthread_join(b,NULL);
}

¡Un puntero en la dirección correcta sería muy apreciado, gracias! (Código compilado en Linux usando "gcc timeTest.c -o timeTest -lpthread")

Respuestas a la pregunta(2)

Su respuesta a la pregunta