From ef5f15bf56dfec8ed1154b4f8a19f0ab6a04d0b1 Mon Sep 17 00:00:00 2001 From: ggeggc Date: Tue, 24 Mar 2020 17:18:00 +0100 Subject: [PATCH] correction des thread sleep correction des thread sleep --- .idea/encodings.xml | 5 +- ..._org_apiguardian_apiguardian_api_1_1_0.xml | 13 ++ ..._junit_jupiter_junit_jupiter_api_5_6_0.xml | 13 ++ ..._platform_junit_platform_commons_1_6_0.xml | 13 ++ ...Maven__org_opentest4j_opentest4j_1_2_0.xml | 13 ++ .idea/misc.xml | 2 +- .idea/uiDesigner.xml | 124 ++++++++++++++++++ lecteursredacteurs/lecteursredacteurs.iml | 4 + lecteursredacteurs/pom.xml | 8 ++ .../src/main/java/Controleur.java | 55 ++++++++ lecteursredacteurs/src/main/java/Lecteur.java | 43 ++++++ .../src/main/java/LecteursRedacteursTest.java | 7 +- .../src/main/java/Redacteur.java | 38 ++++++ .../target/classes/Controleur.class | Bin 0 -> 1019 bytes .../target/classes/Lecteur.class | Bin 0 -> 1003 bytes .../classes/LecteursRedacteursTest.class | Bin 0 -> 1510 bytes .../META-INF/lecteursredacteurs.kotlin_module | Bin 0 -> 16 bytes .../target/classes/Redacteur.class | Bin 0 -> 1011 bytes 18 files changed, 332 insertions(+), 6 deletions(-) create mode 100644 .idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_0.xml create mode 100644 .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_6_0.xml create mode 100644 .idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_6_0.xml create mode 100644 .idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml create mode 100644 .idea/uiDesigner.xml create mode 100644 lecteursredacteurs/src/main/java/Controleur.java create mode 100644 lecteursredacteurs/src/main/java/Lecteur.java create mode 100644 lecteursredacteurs/src/main/java/Redacteur.java create mode 100644 lecteursredacteurs/target/classes/Controleur.class create mode 100644 lecteursredacteurs/target/classes/Lecteur.class create mode 100644 lecteursredacteurs/target/classes/LecteursRedacteursTest.class create mode 100644 lecteursredacteurs/target/classes/META-INF/lecteursredacteurs.kotlin_module create mode 100644 lecteursredacteurs/target/classes/Redacteur.class 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 0000000000000000000000000000000000000000..45250d9a1bf67660549aa268a278d4313f6c1b1e GIT binary patch literal 1019 zcmaJ=-D(p-6#gbjyUDtnKiimCO|6ZIjc7py3yM&Rg-TSkQt{4Bvg+1#H*6;UT=*ag zdfV$lt>A?Z;G=lqBUrzagiWO2&6%A!bH2Yxe*XFX1HcV5OeByrkg_m?S%v(r^Tt{A zo#4glgZ8f5(F(J-yuj196_OWMb}~pKW5Bd<0+xcg5e7O6eRmLX6S-Zdqxs!eP+M{} zYau813X|5l)^4C(=@u*$rJMFiBx53G&ceJXNxgMEZQztbb)spDlTkG2X}5dlUB~Td zFAQX;V&Sw5Wr9$9&)={6J^?nuuB(u1d4YR>@Vf0rkDa#9lVU6EIR1_kd9oiLru0jX zvaQy{(M{s@wG-(_uG3Ypx3$xGb{0c*gEhWD{oI1l= zM2eOEiJM`~65%XQtkEp0SmbUA=VIIsLj^#sc>v=xOfL2pWSfULxp(xtwRiNZ`Sbw! z)UzRvB4UwmRN|EIRbjB2JeB9nvSYKCMFn{*qcFu?i@7mWW^WoOB`M{6Eaf3V#bRm1 z*d-&?Q|TMXF(Kk{rG_iV@& zV|1BX?0t$W)AeHPzD_5Sfk~D!F0j{Nx6X7MJXyhIH2F8XG$n9tN+93Ij8mw^GXF`z bNRiq2PYPE_evK(ypCUPyf}%G0ebxU0b5W!N literal 0 HcmV?d00001 diff --git a/lecteursredacteurs/target/classes/Lecteur.class b/lecteursredacteurs/target/classes/Lecteur.class new file mode 100644 index 0000000000000000000000000000000000000000..c2b676ce2f6ef41cf2b74b52942e0ea3095e6fe5 GIT binary patch literal 1003 zcmZ8f?@!ZE6g{t7DJzAIF+c>70qQoC`P&Z|6GJp=DkOuXAUMR&N(Dih>2(!5AC?%Oyk(V}XJUA1ft8B?ZKuhD|sqq9kDZQK;gm zm%to%^WSa5Mj2BUDh{T#ww?VV-#~e>YDuqaVfLJ_-Gi7}8#9>GrY{Q2*4)f?YZ!)J zrzbb+ZH-xQa7mM!37^hfcCdu1&h(`03*>7r>TL@v0*e{Tb3P=FhkYfxPd@sxuYxGl zcCR?Ns_8}tD(auQs|l2|!oTtY#oF1o*4tFtjJj-3(G5bmHGJQZ@ve5tdN=aDUfYWU zeNU5lbr1~L2siEV1{>>h3h^)$7~fHz|L&#NPr-#?@X8BR5bh^)+G96&qG9aIr-2r5 zQjT?P6je^gfWS3ILl23oVCaGJG?_P1XKe7cogjc><10iXcMPksc8u|(q+pG)j69>w z$h{!N1WB$lGs8lb;Re=u>aQkc_yXL-NJ{>U7{Pz#MqU$t!T1R#6OsSVEaCkd?IKywDP9mYH9n*y651uqLKB6wSGD=vlQOISt>wIo|f*7C_`-+cB> zKfx*yORM|^gzxmQ~d=VIb9x4oCxsBo3ofpg&JPp7{l} zWktI+bnixfo2A+^OiBn|j9nfcjj(iOmrZ_Dz)d-r^v@;TC zbQ|0K!198EvbJ>Ca}wvZ)eNoco*gJ{o|c%wEWx(FZrOqDY==F5ZsH>549rXZpUVPc zuD6}tsq!CitkcSzoe-@`aChHF~(8!kkKE76X4?yg3ji;-t+U<_@b zbBtv)`fKcD6qkk@4G7v3L~^8E7-lhPLjk=cJj!N_@u!coArlzJB)`*`=F@SNjafnl z_xWBF_&U7c?|sRWT|Nl`=I|Etc*pzyp2!c#;UjNr(z;K7weC@^bx*?96}UFx=^sX~ BMqdB` literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..2983af70661ad375cc499ebc4da5a68ca46c532e GIT binary patch literal 16 RcmZQzU|?ooU|@t|egFVe02KfL literal 0 HcmV?d00001 diff --git a/lecteursredacteurs/target/classes/Redacteur.class b/lecteursredacteurs/target/classes/Redacteur.class new file mode 100644 index 0000000000000000000000000000000000000000..b6a4cc6b47991a16f97cf406c587d955adf39cfa GIT binary patch literal 1011 zcmZ8f+iuf95IyVIF?O6w-85;Tqz&bgq|k8ZAqWXopn^;*rBy1*19F^I>k{n9*&zOi z7hWpSfqXWxt`#oi1s{qE(8w*XJ7{sn6r>afx+~` zKty3bhFQ+$+?SXf0>X8N2D7}VP9dPm0^LuJbHif$4`qk-VP7oR;o z5Pld)zc(!0lyt^WgoDIhjlrH){?}*7*Jf{9?~v4H*rNvJ9Y5gPqmNx4?MbUt?}VP) z@3@gK&q-1hNB)o@<4pS8qUL%ui)a)uWOs$@eR$&z61d?H_g!E3!C^eD18U-KIEp;} z(w7ps3Co5wiz>}X0mChdiX0U^2}KT;R*mu+>J%Gv+KCZBzVRKbkvfImSU*MfBraH| zXhWr#rl`VzjvP_nrc8+nsSJ0pL95&~Nrvu#yM!K-ZxM#kKf9qy;%~^FVJ;TA$S;ST zBYSi7*)hL0u1xr=@);$p?~#hNi@#8MOSTu!aK-$A$``2431Kqi#l|&4P5m!WwoLg& z%wuVWznJjfBbPdqwoY}_J$eR-*t?`Zg|YkVvqCzN<}L^=6HSHkDgjE i+{c4Ns7b5rl}1APSK27Cedz;On_d`;B=A!8U literal 0 HcmV?d00001