sissipula
14-04-2009, 17:54
ciao a tutti ho bisogno di un aiuto poichč non sono per niente esperta di programmazione in c non so da che parte cominciare con il problema del produttore consumatore. Per la precisione il testo del progetto che devo fare č il seguente:
Implementare una possibile soluzione al problema classico dei produtto-
ri/consumatori nella variante in cui esistono C consumatori, P produttori
ed un buffer intermedio capace di ospitare N messaggi. Utilizzare i POSIX
thread in C sotto Linux scegliendo liberamente gli strumenti di sincroniz-
zazione piu` comodi allo scopo (in particolare mutex, condizioni, o semafori
per thread).
Realizzare la variante in cui gli inserimenti nel buffer risultano non bloc-
canti mentre le estrazioni risultano normalmente bloccanti. In particolare, le
estrazioni seguiranno la tradizionale semantica secondo la quale un flusso di
esecuzione che estrae da un buffer vuoto verra` sospeso in attesa che qualcuno
vi deponga nuovi messaggi; al contrario, in caso di inserimento in un buf-
fer pieno, il controllo verra` immediatamente restituito al flusso invocante la
chiamata di inserimento, che restituisce un apposito codice di segnalazione.
Viene esplicitamente richiesto di utilizzare le seguenti segnature, adot-
tando l’ipotesi semplificativa che i messaggi siano semplici interi non negativi
modellati con il tipo primitivo int, e che il codice di errore da restituire in
caso di tentativo di inserimento in un buffer gia` pieno sia -1.
// inserimento non bloccante; restituisce -1 se pieno
int put(buffer_t * buffer, int msg);
// estrazione bloccante; sospende il flusso invocante se vuoto
int get(buffer_t * buffer);
buffer t č una struttura dati C da definirsi in funzione della soluzione adot-
tata, ma che in essenza vuole modellare tutto il necessario per gestire il
buffer intermedio su cui operano le due primitive di cui sopra; ad es. piu` o
contenere gli indici di accesso (estrazione e inserimento) ed un array di interi
che ospiteranno i messaggi.
qualcuno mi potrebbe aiutare??? sono veramente nei guai visto che devo consegnarlo lunedě!!!:cry:
Implementare una possibile soluzione al problema classico dei produtto-
ri/consumatori nella variante in cui esistono C consumatori, P produttori
ed un buffer intermedio capace di ospitare N messaggi. Utilizzare i POSIX
thread in C sotto Linux scegliendo liberamente gli strumenti di sincroniz-
zazione piu` comodi allo scopo (in particolare mutex, condizioni, o semafori
per thread).
Realizzare la variante in cui gli inserimenti nel buffer risultano non bloc-
canti mentre le estrazioni risultano normalmente bloccanti. In particolare, le
estrazioni seguiranno la tradizionale semantica secondo la quale un flusso di
esecuzione che estrae da un buffer vuoto verra` sospeso in attesa che qualcuno
vi deponga nuovi messaggi; al contrario, in caso di inserimento in un buf-
fer pieno, il controllo verra` immediatamente restituito al flusso invocante la
chiamata di inserimento, che restituisce un apposito codice di segnalazione.
Viene esplicitamente richiesto di utilizzare le seguenti segnature, adot-
tando l’ipotesi semplificativa che i messaggi siano semplici interi non negativi
modellati con il tipo primitivo int, e che il codice di errore da restituire in
caso di tentativo di inserimento in un buffer gia` pieno sia -1.
// inserimento non bloccante; restituisce -1 se pieno
int put(buffer_t * buffer, int msg);
// estrazione bloccante; sospende il flusso invocante se vuoto
int get(buffer_t * buffer);
buffer t č una struttura dati C da definirsi in funzione della soluzione adot-
tata, ma che in essenza vuole modellare tutto il necessario per gestire il
buffer intermedio su cui operano le due primitive di cui sopra; ad es. piu` o
contenere gli indici di accesso (estrazione e inserimento) ed un array di interi
che ospiteranno i messaggi.
qualcuno mi potrebbe aiutare??? sono veramente nei guai visto che devo consegnarlo lunedě!!!:cry: