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

int x = 0; /* variable partagée */
pthread_mutex_t mx; /* AJOUT : verrou pour protéger x */

void* f(void* args){
    char* nom = (char*) args;
    printf("Debut de fonction %s\n", nom);
    for (int i = 0; i < 100000; i += 1) {
        pthread_mutex_lock(&mx); // AJOUT 
        x += 1;
        pthread_mutex_unlock(&mx); // AJOUT
    }
    printf("Fin de fonction %s\n", nom);
    return NULL;
}

int main() {
    pthread_mutex_init(&mx, NULL); // AJOUT
    pthread_t t1;
    pthread_t t2;
    printf("Le thread principal lance deux nouveaux threads\n");
    pthread_create(&t1, NULL, f, "A");
    pthread_create(&t2, NULL, f, "B");
    printf("Le thread principal attend la fin du thread A\n");
    pthread_join(t1, NULL);
    printf("Le thread principal attend la fin du thread B\n");
    pthread_join(t2, NULL);
    printf("x=%d\n", x);
    return 0;
}