#include "userlib/syscall.h"
#include "userlib/libnachos.h"


const int N = 3;
int iplein = 0;
int ivide = 0;
int tab[3];
SemId svide;
SemId splein;

void producteur();

void consommateur();

int main() {
    svide = SemCreate("producteur", N);
    splein = SemCreate("consommateur", 0);
    ThreadId producteurTh = threadCreate("producteur", producteur);
    ThreadId consommateurTh = threadCreate("consommateur", consommateur);
    Join(producteurTh);
    Join(consommateurTh);
    return 0;
}

void producteur() {
    for(int i = 0; i < 10; i++) 
    {
        n_printf("batir une information\n");
        P(svide);
        iplein = (iplein + 1) % N;
        n_printf("communique une information : %d\n", i);
        tab[iplein] = i;
        V(splein);
    }
}

void consommateur() {
    for(int i = 0; i < 10; i++) 
    {
        P(splein);
        ivide = (ivide +1) % N;
        n_printf("recevoir une information\n");
        int info = tab[ivide];
        V(svide);
        n_printf("exploiter l'information : %d\n", info);
    }
}
