diff --git a/.idea/encodings.xml b/.idea/encodings.xml
index ad0f614..ab83987 100644
--- a/.idea/encodings.xml
+++ b/.idea/encodings.xml
@@ -1,9 +1,10 @@
+
+
-
+
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_0.xml b/.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_0.xml
new file mode 100644
index 0000000..f854ab0
--- /dev/null
+++ b/.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_6_0.xml b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_6_0.xml
new file mode 100644
index 0000000..be380a5
--- /dev/null
+++ b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_6_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_6_0.xml b/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_6_0.xml
new file mode 100644
index 0000000..8e5d3f2
--- /dev/null
+++ b/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_6_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml b/.idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml
new file mode 100644
index 0000000..fbc1b16
--- /dev/null
+++ b/.idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 70a0c84..e65e1c3 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -9,7 +9,7 @@
-
+
\ No newline at end of file
diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 0000000..e96534f
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/lecteursredacteurs/lecteursredacteurs.iml b/lecteursredacteurs/lecteursredacteurs.iml
index 08c1eba..3dd51ff 100644
--- a/lecteursredacteurs/lecteursredacteurs.iml
+++ b/lecteursredacteurs/lecteursredacteurs.iml
@@ -11,5 +11,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/lecteursredacteurs/pom.xml b/lecteursredacteurs/pom.xml
index 0126124..bbefc3d 100644
--- a/lecteursredacteurs/pom.xml
+++ b/lecteursredacteurs/pom.xml
@@ -7,6 +7,14 @@
ch.heigvd.to
lecteursredacteurs
1.0-SNAPSHOT
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+ 5.6.0
+ compile
+
+
pom
diff --git a/lecteursredacteurs/src/main/java/Controleur.java b/lecteursredacteurs/src/main/java/Controleur.java
new file mode 100644
index 0000000..36abbb2
--- /dev/null
+++ b/lecteursredacteurs/src/main/java/Controleur.java
@@ -0,0 +1,55 @@
+public class Controleur {
+
+ private int redacteurs = 0;
+ private int redacteursAttente = 0;
+ private int lecteurs = 0; // Nombre de lecteurs en train de lire
+
+ public synchronized void startRead() {
+
+ // Si il y a un rédacteur en train d'écrire -> thread en attente
+ while (redacteurs > 0 || redacteursAttente > 0) {
+ try {
+ this.wait();
+ } catch (InterruptedException e) {
+ }
+ }
+ lecteurs++;// Un lecteur supplémentaire
+ }
+
+ public synchronized void stopRead() {
+ /*
+ un lecteur actif en moins, si il n'y en
+ a plus, on libère tout les threads en wait avec notifyAll
+ */
+ lecteurs--;
+ if (lecteurs == 0) this.notifyAll();
+
+ }
+
+ public synchronized void startWrite() {
+ redacteursAttente++;
+ /* Si il y a encore un lecteur en train de lire
+ ou un autre redacteur en train d'écrire
+ le thread est en attente.
+ */
+ while ((lecteurs > 0 || redacteurs > 0)) {
+ try {
+ this.wait();
+ } catch (InterruptedException e) {
+ }
+ }
+ redacteurs++;
+ redacteursAttente--;
+ }
+
+ public synchronized void stopWrite() {
+ /*
+ un lecteur actif en moins, si il n'y en
+ a plus, on libère tout les threads en wait avec notifyAll
+ */
+ redacteurs--;
+ if (lecteurs == 0) this.notifyAll();
+ }
+}
+
+
diff --git a/lecteursredacteurs/src/main/java/Lecteur.java b/lecteursredacteurs/src/main/java/Lecteur.java
new file mode 100644
index 0000000..a3460f0
--- /dev/null
+++ b/lecteursredacteurs/src/main/java/Lecteur.java
@@ -0,0 +1,43 @@
+/*
+porblème avec l'utilisation de thread sleep car les assert ne marche pas à tout les coup.
+ */
+
+public class Lecteur implements Runnable {
+
+ private Controleur controleur;
+ private boolean enAttente = false;
+
+ public Lecteur(Controleur c) {
+ controleur = c;
+ }
+
+ public void run(){
+ // si le controleur n'a pas commencé, le lecteur est en attente
+ enAttente = true;
+ {
+ controleur.startRead();
+ }
+ // si il est en train de lire il n'est plus en attente
+ enAttente = false;
+ }
+
+ public synchronized void startRead() {
+ new Thread(this).start();
+ try {
+ Thread.sleep(1);
+ } catch (InterruptedException e) {}
+ }
+
+ public synchronized void stopRead() {
+ controleur.stopRead();
+ try {
+ Thread.sleep(1);
+ } catch (InterruptedException e) {}
+ }
+
+ public boolean isWaiting() {
+ return enAttente;
+ }
+
+
+}
\ No newline at end of file
diff --git a/lecteursredacteurs/src/main/java/LecteursRedacteursTest.java b/lecteursredacteurs/src/main/java/LecteursRedacteursTest.java
index 4dcdd03..eea4ee9 100644
--- a/lecteursredacteurs/src/main/java/LecteursRedacteursTest.java
+++ b/lecteursredacteurs/src/main/java/LecteursRedacteursTest.java
@@ -1,6 +1,3 @@
-package ch.heig.pl.lecteursredacteurs;
-
-
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -51,6 +48,7 @@ public void lecteursRedacteurs() throws InterruptedException {
redacteur2.startWrite();
redacteur1.stopWrite();
+
// redacteur 1 libère mais redacteur 2 passe avant lecteur 3
assertTrue(lecteur3.isWaiting());
assertFalse(redacteur2.isWaiting());
@@ -59,6 +57,9 @@ public void lecteursRedacteurs() throws InterruptedException {
// après les redacteurs , lecteur3 est libéré
assertFalse(lecteur3.isWaiting());
lecteur3.stopRead();
+
+
+
}
}
\ No newline at end of file
diff --git a/lecteursredacteurs/src/main/java/Redacteur.java b/lecteursredacteurs/src/main/java/Redacteur.java
new file mode 100644
index 0000000..fd63460
--- /dev/null
+++ b/lecteursredacteurs/src/main/java/Redacteur.java
@@ -0,0 +1,38 @@
+public class Redacteur implements Runnable{
+
+ private Controleur controleur;
+ private boolean enAttente = false;
+
+ public Redacteur(Controleur c) {
+ controleur = c;
+ }
+
+ public void run() {
+ // si le controleur n'a pas commencé, le redacteur est en attente
+ enAttente = true;
+ {
+ controleur.startWrite();
+ }
+ // si il est en train d'écrire il n'est plus en attente
+ enAttente = false;
+ }
+
+ public synchronized void startWrite() {
+ new Thread(this).start();
+ try {
+ Thread.sleep(1);
+ } catch (InterruptedException e) {}
+ }
+
+ public synchronized void stopWrite() {
+ controleur.stopWrite();
+ try {
+ Thread.sleep(1);
+ } catch (InterruptedException e) {}
+ }
+
+ public boolean isWaiting() {
+ return enAttente;
+ }
+
+}
diff --git a/lecteursredacteurs/target/classes/Controleur.class b/lecteursredacteurs/target/classes/Controleur.class
new file mode 100644
index 0000000..45250d9
Binary files /dev/null and b/lecteursredacteurs/target/classes/Controleur.class differ
diff --git a/lecteursredacteurs/target/classes/Lecteur.class b/lecteursredacteurs/target/classes/Lecteur.class
new file mode 100644
index 0000000..c2b676c
Binary files /dev/null and b/lecteursredacteurs/target/classes/Lecteur.class differ
diff --git a/lecteursredacteurs/target/classes/LecteursRedacteursTest.class b/lecteursredacteurs/target/classes/LecteursRedacteursTest.class
new file mode 100644
index 0000000..1d5065b
Binary files /dev/null and b/lecteursredacteurs/target/classes/LecteursRedacteursTest.class differ
diff --git a/lecteursredacteurs/target/classes/META-INF/lecteursredacteurs.kotlin_module b/lecteursredacteurs/target/classes/META-INF/lecteursredacteurs.kotlin_module
new file mode 100644
index 0000000..2983af7
Binary files /dev/null and b/lecteursredacteurs/target/classes/META-INF/lecteursredacteurs.kotlin_module differ
diff --git a/lecteursredacteurs/target/classes/Redacteur.class b/lecteursredacteurs/target/classes/Redacteur.class
new file mode 100644
index 0000000..b6a4cc6
Binary files /dev/null and b/lecteursredacteurs/target/classes/Redacteur.class differ