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
Code :
- 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 ;
- }
|
j essai de compléter le code
Code :
- 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 ;
- }
|
je suis nouveau
est qu il ya des erreurs
et pourquoi la classe ReadersWriters n hérite pas de la classe Thread ?