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
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 |