You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

36 lines
1.1 KiB

TP2
1
A
Le problème reader/writer est différent.
Dans notre cas, on veut que des clients et des patissiers accèdent à une ressource partagée ; l'une en "lecture", l'autre en "écriture"
Mais on veut aussi empêcher un client de prendre une patisserie s'il n'yen a aucune de prete, par exemple.
Ca ressemble beaucoup plus à un problème producer/consumer.
B
La boutique peut jouer le role de moniteur, comme elle gère les inputs outputs et connait le stock
Elle définit un buffer de taille n, puis
put() {
if(getstock() == n) {
notFull.await(); // ne pas ajouter si plein
}
/*
do the putting ...
*/
// stock++ if necessary
notEmpty.signal(); // annoncer que non vide
}
Symmétriquement,
get() {
if(getstock() == 0) {
notEmpty.await(); // ne pas prendre si vide
}
/*
do the getting ...
*/
// stock-- if necessary
notFull.signal(); // annoncer que non plein
}
Avec un arrayList, on pourra / devra implémenter un buffer circulaire, càd tracer la tete et la queue en indexes variables qu'on incrémente, modulo, tout le bazar
Depuis le main, on start() les Customers et PastryChefs qui héritent de Runnable