Rossella92 ha scritto:
Qualcuno saprebbe darmi qualche idea su come risolverlo?
Allora, c'è solo da ragionare un pochino. Il fatto di avere un array di oggetti Semaphore va bene. Ciascun motociclista-thread da quanto deduco "sa" già quale è la sua maglia, presumo che quando crei i motociclisti gli passi tu un indice progressivo da 0. Se così, anche questo va bene.
Il punto è che in partenza() non devi fare 2 acquire. Solo uno, quello relativo a
quel motociclista. Se il semaforo è tale per cui può passare, ok, altrimenti sta lì bloccato.
Quando crei l'oggetto GaraSem ha senso fare in modo che i primi 2 semafori ([0] e [1]) abbiano già il permit (permesso) disponibile, così chi tra i motociclisti invoca partenza(0) e partenza(1) può "partire" subito.
Le questioni semmai sono sul arrivo(). All'inizio hai detto che "la pista può contenere solo due motociclisti per volta". Ma due nel senso della coppia per intero o due qualunque?
Mi spiego meglio: la coppia 0-1 è partita, non sai quale dei due arriva prima. Vuoi far partire la coppia 2-3 SOLO quando entrambi i motociclisti 0-1 sono arrivati .... o è sufficiente che se quello 0 è arrivato, allora può partire il 2 (indipendentemente da quando arriva il 1, che farà poi partire il 3) ??
Questo è il punto che a me non è chiaro. Per il resto ho chiarito qualcosa? Appena ho tempo provo a scriverlo anche io per vedere quali inghippi eventualmente mi saltano fuori.