Simone Trombiero
Nuovo Utente
- Messaggi
- 16
- Reazioni
- 0
- Punteggio
- 23
Salve, sto provando a fare esercizi sulla programmazione concorrente in Java ma ho un dubbio sull'utilizzo dei semafori per leggere da una risorsa condivisa.
La traccia dell'esercizio è questa:
Per implementare le corsie uso i due seguenti array:
ed inizializzo ogni semaforo a 4.
Il mio dubbio è il seguente: nel metodo che si occupa di scegliere la corsia meno affollata, quindi che cerca l'indice del minimo nell'array di interi, devo utilizzare un semaforo di mutua esclusione? Io credo di si, ed ho trovato queste soluzione, ma non ne sono sicuro:
Grazie per l'eventuale risposta.
La traccia dell'esercizio è questa:
Delle persone frequentano una piscina per esercitarsi nel nuoto. La piscina è composta da 5 corsie, ciascuna delle quali può essere usata al più da 4 persone contemporaneamente. Ogni persona sceglie la corsia occupata dal mi-nor numero di persone: se la piscina è al completo, sceglie una corsia in maniera casuale e attende in ordine FIFO. Non appena entra in corsia, nuota per un tempo tra 30 e 60 minuti, quindi si fa la doccia (20 minuti), dopodiché va via. La piscina è gestita da un istruttore che deve controllare tutte le attività che si svolgono nelle corsie. L’istruttore ogni giorno gestisce due turni: la mattina tiene aperta la piscina per 4 ore, poi fa una pausa di 1 ora, e riapre la piscina per il turno pomeridiano di 5 ore. Nessuna persona può entrare in piscina se non è presente l’istruttore. Alla chiusura della piscina (sia alla pausa sia alla chiusura finale), se sono presenti delle persone nelle corsie, l’istruttore forza le persone ad uscire dalla piscina. Le persone devono immediatamente liberare la piscina, terminando in anticipo l’attività in acqua e andando subito a fare la doccia.
Per implementare le corsie uso i due seguenti array:
Codice:
int[] corsie=new int[5];
Semaphore[] corsieSem=new Semaphore[5];
Il mio dubbio è il seguente: nel metodo che si occupa di scegliere la corsia meno affollata, quindi che cerca l'indice del minimo nell'array di interi, devo utilizzare un semaforo di mutua esclusione? Io credo di si, ed ho trovato queste soluzione, ma non ne sono sicuro:
Codice:
private Semaphore mutexCorsie=new Semaphore(1);
int corsiaMenoOccupata() throws InterruptedException {
mutexCorsie.acquire();
int indiceMin=indiceMin(corsie);
if(corsie[indiceMin]==4){
mutexCorsie.release();
return random.nextInt(5);
}
mutexCorsie.release();
return indiceMin;
}
Grazie per l'eventuale risposta.