Ciao!
La funzione che usi per creare il semaforo inizializza il suo contatore a 0?
Normalmente le funzioni che chiudono i semafori decrementano il contatore e bloccano la risorsa sol nel momento in cui questo contatore scende sotto 0, permettendo così all'utente di decidere quanti enti possono utilizzare contemporaneamente la risorsa impostando quel parametro.