salve

vi posto la traccia di un semplice programma java, nel caso potreste cortesemente darmi una mano:



Si vuole realizzare un sistema per controllare i semafori installati in un incrocio di 4 strade. Ogni direzione, fra N, S, E, O, è governata da un proprio semaforo e da un sensore di macchine in attesa di attraversare l'incrocio. Ogni semaforo, e il corrispondente sensore, è controllato da un client. In ogni momento uno solo dei quattro semafori può essere verde. Quando un semaforo passa da rosso a verde ci resta per 10 secondi. I quattro client sono collegati ad un server.

Scrivere il programma dei client per la gestione delle 4 direzioni, e il programma del server per la coordinazione dei client rispettando il seguente protocollo.

CLIENT
Un client può inviare al server i seguenti messaggi:
- CHIEDO_VERDE: per richiedere al server la possibilità di accendere la luce verde del semaforo che gestisce;
- DIVENTO_ROSSO: comunica al server che ha riacceso la luce rossa.

Se il client ad una richiesta di CHIEDO_VERDE riceve una risposta di ACK_VERDE, accende la luce verde, la tiene accesa per 10 secondi, quindi riaccende la luce rossa e lo comunica al server. (Utilizzare il metodo Thread.sleep(10) per creare un'attesa di 10 secondi).

SERVER
Il server quando riceve il messaggio CHIEDO_VERDE da un client può rispondere con:
- ACK_VERDE: se tutti i semafori in quel momento sono rossi;
- NACK_VERDE: se esiste già un semaforo con la luce verde accesa.

Il server, inoltre, memorizza per ogni direzione il numero di volte che è stata accesa la luce verde del corrispondente semaforo.

L’implementazione suggerita del semaforo può determinare situazioni di starvation (impossibilità da parte di alcuni semafori ad ottenere il verde). Spiegare perché, trovare una soluzione migliorativa ed implementarla.


Perchè si possono determinare situazioni di starvation?
Secondo voi quale potrebbe essere una soluzione migliorativa?

Grazie mille