dans cette probléme
on suppose que la priorité est donné aux rédacteurs qui attendent . Ainsi dès
qu ' un rédacteur est disponible , tous les nouveaux lecteurs sont bloqués jusqu a ce que tous les rédacteurs auront terminés . bien sur , dans d'extremes situations cela va mener à une famine des lecteurs
on utilise un moniteur requie 4 méthodes startRead,stopRead,startWrite et stopWrite , les Deux premiéres implémentent respectivement les sections d entrée et de sortie .les deux autres implémentent celles des rédacteurs.ainsi les lecteurs sont structurés comme suit :
startRead(); // entry protocol
//Call object to read data structure
stopRead(); // exit protocol
de maniére similaire ,les rédacteurs :
startWrite();
//........
stopWrite();
le travail demandé est de compléter le code du moniteur ReadersWriters
j essai de compléter le code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 public class ReadersWriters { public ......... void startWrite() { /* wait until it is ok to write */ while(.......... || ..........) { ............; wait(); ............; } writing=........; } public ......... void stopWrite() { ........... notifyAll(); } public ........ void startRead() { /*wait until it is ok to read */ while (.......... || ........... > 0) wait(); ............; } public ......... void stopRead() { ........; if(..........) notifyAll(); } private int readers = 0 ; private int waitingWriting = .........; private boolean writing = false ; }
je suis nouveau
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 public class ReadersWriters { public synchronized void startWrite() { /* wait until it is ok to write */ while(writing || waitingWriters > 0) { waitingWriters++; wait(); waitingWriters--; } writing=true; } public synchronized void stopWrite() { writing=false; notifyAll(); } public synchronized void startRead() { /*wait until it is ok to read */ while (writing || waitingWriters > 0) wait(); readers++; } public synchronized void stopRead() { readers--; if(readers = 0) notifyAll(); } private int readers = 0 ; private int waitingWriting = 0 ; private boolean writing = false ; }
est qu il ya des erreurs
et pourquoi la classe ReadersWriters n hérite pas de la classe Thread ?
Partager