Lecteurs/rédacteurs course code.
[TD_SE.git] / lecteursredacteurs / lecteursredacteurs.c
diff --git a/lecteursredacteurs/lecteursredacteurs.c b/lecteursredacteurs/lecteursredacteurs.c
new file mode 100644 (file)
index 0000000..85db645
--- /dev/null
@@ -0,0 +1,45 @@
+#include <unistd.h>
+#include <stdio.h>
+#include <semaphore.h>
+
+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()
+{
+
+}