Salve,

Ho necessità di risolvere una situazione del genere con ad esempio semafori di mutua esclusione, sincronizzazione, semafori contatori o primitive di comunizione tipo send() e receive():

Ho un processo "Persona" con N=300 istanze, e ho una risorsa "Hard Disk" con K=3 istanze.
Vorrei che queste 300 persone utilizzino i 3 hard disk ma facendo in modo che ogni hard disk venga usato da massimo 100 persone.

Non ho specificato un linguaggio in particolare perchè preferisco una soluzione in pseudocodice giusto per avere una strategia di risoluzione.

Ad esempio ho pensato questo:

Semafori: Sem2 = 300, Sem3 = 100;

Processo Persona (N):
Wait (Sem2)
qui passano in 300 persone per usare i 3 Hd's
Wait (Sem3)
passano i 100 per usare un solo HD
Signal (Sem3)
Signal (Sem2)

I miei dubbi però sono:

1) In questo modo ogni 100 persone gli altri devono aspettare che le 100 persone abbiano usato un hard disk invece io vorrei che 100 persone usino un hard disk e che in contemporanea gli altri 200 facciano lo stesso con i restanti due hard disk.

2) Gli hard disk sono la risorsa, ma in questo caso pensate sia utile considerarla come un processo (quindi 3 processi hard disk) e sincronizzarli con i semafori con gli N processi persone?

Grazie