Salve a tutti,
ho un problema con l'utilizzo dei semafori nel linguaggio C
ho scritto una soluzione in linguaggio C al problema classico produttori/consumatori
il programma compila e funziona
ora il problema è che devo verificare che un consumatore che tenta di leggere da un buffer vuoto resti in attesa di una scrittura da parte di un produttore.
Ovviamente questo deve avvenire perchè le letture devono essere bloccanti.
in altre parole quando un thread consumatore effettua una lettura deve rimanere in attesa, e questo so come farlo. Quello che non so fare è testare che tutto funzioni correttamente.
l mio prof ha detto di mettere un flag (che viene modificato se il consumatore effettua la lettura) e verificare, dopo un tempo stabilito di attesa che il flag non è cambiato...
in altre parole devo fare in modo che dopo un tempo stabilito (abbastanza grande da essere sicuro che il thread è sospeso indefinitivamente) il consumatore deve bloccarsi e restituire un valore e il controllo deve passare al processo main (che controllerà il flag)
io ho usato i sem_t con i threads in C..ho cercato parecchio e ho trovato la primitiva sem_timedwait(semaforo, timespec)
ora le domande sono:
questa primitiva appartiene ai posix threads di linux (gira su qualsiasi linux)? (lo chiedo perchè a lezione questa primitiva non è stata presentata)
-come va utilizzata? in particolare il time spec indica un tempo assoluto, come posso cambiarlo in un intervallo di tempo (tipo 10 secondi a partire da adesso)
ho già girato parecchio in rete, ma non sono ancora riuscito a venirne a capo...
chiedo scusa se ho scritto errori, e vi ringrazio per ogni eventuale risposta