carlo98
15-04-2009, 15:30
Salve a tutti,
č la prima volta che scrivo in questo forum, spero di aver postato nella sezione giusta
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.
Ovviamentee questo deve avvenire perchč le letture devono essere bloccanti.
Il 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 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)
chiedo scusa se ho scritto errori, e vi ringrazio per ogni eventuale risposta
č la prima volta che scrivo in questo forum, spero di aver postato nella sezione giusta
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.
Ovviamentee questo deve avvenire perchč le letture devono essere bloccanti.
Il 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 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)
chiedo scusa se ho scritto errori, e vi ringrazio per ogni eventuale risposta