X-Git-Url: https://git.piment-noir.org/?p=TD_SE.git;a=blobdiff_plain;f=lecteursredacteurs%2Flecteursredacteurs.c;fp=lecteursredacteurs%2Flecteursredacteurs.c;h=85db6457720f82d2108264527b9a6788e1b8fef2;hp=0000000000000000000000000000000000000000;hb=6b2a29cee63432808e12a0b9a0cd0acfc9cf3976;hpb=155664dba1b537176fb66d28ab4412d1853a195d diff --git a/lecteursredacteurs/lecteursredacteurs.c b/lecteursredacteurs/lecteursredacteurs.c new file mode 100644 index 0000000..85db645 --- /dev/null +++ b/lecteursredacteurs/lecteursredacteurs.c @@ -0,0 +1,45 @@ +#include +#include +#include + +static int db = 42; +static int NbL = 0; +sem_t mutex; +sem_t redact; + +static void *lecteur(void *arg) +{ + while (1) { + sem_wait(&mutex); + if (NbL == 0) + sem_wait(&redact); + NbL++; + sem_post(&mutex); + // lecture de la base + sleep(1); + printf("lecteur bd=%d\n", db); + // fin de l’accès à la base + sem_wait(&mutex); + NbL--; + if (NbL == 0) + sem_post(&redact); + sem_post(&mutex); + } +} + +static void *redacteur(void *arg) +{ + while (1) { + sem_wait(&redact); + // modifier les données de la base + db++; + printf("redacteur bd=%d\n", db); + sleep(2); + sem_post(&redact); + } +} + +int main() +{ + +}