#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <semaphore.h>

#define P sem_wait
#define V sem_post

sem_t mutex1;
sem_t mutex2;

static void *task_a()
{
    printf("Systeme\n");
    V(&mutex2); // on autorise l'OS à lancer l'autre thread
    P(&mutex1); // on bloque le thread
    printf("-\n");
    V(&mutex2); // on autorise la reprise de l'autre thread
    P(&mutex1); // on bloque ce thread

    return NULL;
}

static void *task_b()
{
    P(&mutex2); // On bloque le thread, ainsi seul l'autre thread commencera à etre exécuté
    printf("Temps\n");
    V(&mutex1); // on autorise la reprise de l'autre thread
    P(&mutex2); // on bloque ce thread
    printf("Reel\n");

    return NULL;
}

int main()
{
    // création des threads
    pthread_t T1;
    pthread_t T2;

    // on initialise les 2 mutex à 0
    sem_init(&mutex1, 0, 0);
    sem_init(&mutex2, 0, 0);

    // on crée les threads
    pthread_create(&T1, NULL, task_a, NULL);
    pthread_create(&T2, NULL, task_b, NULL);

    getchar();
    return 0;
}
