ho il seguete semaforo dichiarato globale

sem_t generale;

inizializzato con:

sem_init(&generale,0,0);

e il seguente codice:
codice:
while(1){
        sem_wait(&generale);        
            sprintf(str,"Prova");
            write(1,str,strlen(str));
        sem_post(&generale);
}
e fatto partire da :

sem_post(&generale);


il fatto è che se il codice lo tolgo dal while funziona, mentre nel while in questo modo va in loop.

sapete aiutarmi?