Gestire un solo accesso al semaforo va bene, ma è gestire continui accessi e rilasci che diventa difficoltoso e non lo è tanto lo schema mentale, quello l'ho ben chiaro, il fatto è che in time-sharing possono accadere cose alquanto bizzarre. Il mio problema è essere sicuro che in ogni momento in memoria condivisa ci sia il processo giusto. Nel caso della mia battaglia navale le due istanze dovranno scambiarsi dati e permettere o proibire all'altro di entrare in sezione critica senza un input dell'utente, ma gestirsi autonomamente.
Per ora sono orientato all'uso di due semafori, sem[0] per permettere o proibire alla prima istanza di accedere alla memoria condivisa e sem[1] per la seconda, la gestione sto pensando di farla in modo che sarà P1 ad occupare sem[0] quando gli serve, ma dovrà poi essere P2 a liberarlo quando avrà finito il suo lavoro in memoria condivisa e viceversa per sem[1].
Al momento mi sembra la soluzione più semplice, staremo a vedere con l'andare avanti del codice se è la pensata giusta o se dovrò rivedere tutto.