Rossella92 ha scritto:
Il problema è che non riesco a capire bene il ragionamento che sta dietro ai metodi dei semafori.
Cioè se dichiaro un semaforo "Semaphore semA=new Semaphore(2)" vuol dire che 2 thread possono accedere ad esso.
Un semaforo ha un numero
N di "permessi" (permit in inglese). Quando fai un acquire() ne prendi uno. Quando fai un release() lo rilasci (per renderlo disponibile ad altri). Quando il numero di permessi in un certo istante è 0
e un thread fa un acquire(), si blocca e resta lì in attesa di poterne prendere uno.
Rossella92 ha scritto:
come dovrei farlo?
O con un tuo contatore o magari guardando quanti permit ci sono. Se partendo con semA con 2 permessi ad un certo punto ce ne sono 0, vuol dire che 2 A sono passati. A quel punto dai 2 permessi per B. E così al contrario da B ad A.