a15e271ddea8a41aa4618f289b18d2c6e5b2a6bb
[TD_SE.git] / lecteursredacteurs / lecteursredacteurs.c
1 #include <unistd.h>
2 #include <stdio.h>
3 #include <semaphore.h>
4
5 static int db = 42;
6 static int NbL = 0;
7 sem_t mutex;
8 sem_t redact;
9
10 static void *lecteur(void *arg)
11 {
12 while (1) {
13 sem_wait(&mutex);
14 if (NbL == 0)
15 sem_wait(&redact);
16 NbL++;
17 sem_post(&mutex);
18 // lecture de la base
19 sleep(1);
20 printf("lecteur bd=%d\n", db);
21 // fin de l’accès à la base
22 sem_wait(&mutex);
23 NbL--;
24 if (NbL == 0)
25 sem_post(&redact);
26 sem_post(&mutex);
27 }
28 return NULL;
29 }
30
31 static void *redacteur(void *arg)
32 {
33 while (1) {
34 sem_wait(&redact);
35 // modifier les données de la base
36 db++;
37 printf("redacteur bd=%d\n", db);
38 sleep(2);
39 sem_post(&redact);
40 }
41 return NULL;
42 }
43
44 int main()
45 {
46
47 }