85db6457720f82d2108264527b9a6788e1b8fef2
[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 }
29
30 static void *redacteur(void *arg)
31 {
32 while (1) {
33 sem_wait(&redact);
34 // modifier les données de la base
35 db++;
36 printf("redacteur bd=%d\n", db);
37 sleep(2);
38 sem_post(&redact);
39 }
40 }
41
42 int main()
43 {
44
45 }