|
CrisLoveStefy
Nuovo Utente
|
Inserito il - 12/02/2007 : 10:37:37
|
Salve io vorrei solo capire swe ho capito bene come devo fare conquesto progetto:
Realizzare due implementazioni in C che realizzino con Semafori e Monitor una soluzione concorrente al seguente problema: Il Bar Sport #56256;#56442; Nel bar Sport il barista prepara i caffè posizionando le tazzine piene sul bancone del bar in attesa dei clienti (che sono M).
#56256;#56442; Sul bancone al massimo possono essere posizionate N tazzine (N<M).
#56256;#56442; Quando il bancone è pieno di tazzine di caffè il barista si sospende mettendosi a leggere la Gazzetta dello Sport.
#56256;#56442; Man mano che arrivano, i clienti prendono una tazzina di caffè, ma prima di berlo devono zuccherarlo e una sola zuccheriera è disponibile.
#56256;#56442; Una volta zuccherato e bevuto il caffè, i clienti escono dal bar per fumarsi una sigaretta.
#56256;#56442; Una volta terminata la sigaretta i clienti tornano dentro al bar per prendere un altro caffè
#56256;#56442; Il cliente che beve l’ultima tazzina di caffè sveglia il barista, interrompendo la sua lettura. #56256;#56442; I clienti che nel frattempo arrivano al bar e vogliono bere il caffè si sospendono in attesa che il barista abbia finito di riempire il bancone di tazzine di caffè.
#56256;#56442; Quando il barista ha riempito il bancone allora si occupa di svegliare i clienti in attesa del caffè.
La soluzione proposta deve assicurare il massimo grado di parallelismo, non deve usare busy waiting, ne’ generare deadlock o starvation. Commentare in modo chiaro il codice.
Il mio algoritmo pensato è:
#define tazzine 5
MEX: Sono le ore 7:00 e il barista sta aprendo il bar SLEEP: 5 sec MEX: Il barista ha aperto il bar. SLEEP: 5 sec MEX: Il barista inizia a prepare le tazzine CICLO: FOR (I=0; I<TAZZINE I++) { IF (TAZZINE<2) IL BARISTA HA PREPARATO %d TAZZINA (%d = tazzINE) ELSE IL BARISTA HA PREPARATO %d taZZINE (%d = tAZZINE) tazzine++; sleep 5 secondi } MEX: Fatto! il barista ha posizionato %D TAzzine sul bancone. Ora va a leggere la gazzetta dello sport. (stato di waiting) MEX: Dopopochi secondi arrivano con la random m clienti (FARei una random tra 1,3,6 clienti... MEX: I clienti sono seduti davanti al bancone CICLO: FOR I=0; I<CLIENTI; I++) { CLIENTE numero %D prende zuccheriera. SLEEP 2 SEC CLIENTE HA ZUCCHERATO IL SUO CAFFE' cliente++; CLIENTE numero %D (clIENTE-1) passa la zuccheriera al cliente numero %D (cliente successivo) } MEX: dopo che tutti hanno finito di bere il caffè Vanno a fumarsi la sigaretta CICLO: simile a quello di prima solo che si accendo la sigaretta uno ogni tanto...penso che sia così no?
Però come faccio a dire che l'ultimo cliente che ha bevuto la tazzina attiva dallo stato di wait del barista per far in modo che il barista prepari altro caffè? Come faccio a mettere in waiting gli altri clienti affincè il barista non ha riposizionato n tazzine? Con un if? I semafori e monitor come li implemento? Vorreei solo sapere se l'algoritmo va bene ecome fare l'implementazione dei semafori.
Grazie Cordiali Saluti Non voglio mica farvi impazzire con sta roba che a me hanno fatto impazzire!!!
|
|