PDA

Visualizza la versione completa : [C] Pipe e dimensione massima della scrittura


new_programmer
01-03-2011, 19:43
Salve a tutti,

ho il classico problema del consumatore e del produttore...
il pmio problema è che nella pipe devo scrivere al massimo x byte, dove x<MAX_PIPE_SIZE (ossia è inferiore alla dimensione massima della pipe)....

Qualcuno mi sa aiutare?

Grazie mille

new_programmer
02-03-2011, 18:31
up

jobv
04-03-2011, 19:20
Ciao,

ma cosa ti servirebbe?

La dimensione massima di una pipe è definita (almeno su Linux) da PIPE_BUF (tipicamente 4K).
Se un'operazione di scrittura deve scriverne di più non c'è garanzia che l'operazione sia atomica.

new_programmer
04-03-2011, 20:16
a me servirebbe che il processo produttore deve immettere nell pipe un massimo di x byte, inferiore ovviamente alla dimensione massimo della byte...

jobv
04-03-2011, 22:17
OK...ma il valore di "x" lo devi stabilire all'inizio, deve darlo l'utente....posta qualche dettaglio in più e magari del codice :D

new_programmer
05-03-2011, 10:06
Allora,

il consumatore ha una velocità di "consumo" pari a 3 byte (3 char) per unità di tempo.
La pipe deve ospitare al più due char (quindi due byte) per volta...

new_programmer
07-03-2011, 09:08
aiutooooooooo :dhò: :dhò: :dhò:

jobv
07-03-2011, 09:37
Ciao...io continuo a non capire...è un'esercizio? Ma hai scritto almeno qualche riga di codice? Se è un'esercizio, forse postando il testo completo risulterebbe più chiaro (almeno per me :D )

new_programmer
07-03-2011, 10:14
Si, è un tipico esercizio universitario. :-D

Dunque, io ho tentato di fare così:
Supponiamo di voler scrivere al max due caratteri nella pipe.

Inizializzo un semaforo a 2.

Il produttore effettua una wait sul semaforo, se trova "verde" scrive "X" sulla pipe, altrimenti no.
Il consumatore, non appena legge il primo carattere dalla pipe effettua una signal sul semaforo...

Dal punto di vista logico è corretto?

jobv
07-03-2011, 16:09
Da quello che hai scritto mi pare di capire che tu possa essere sicuro di questo:

1) Il consumatore non consumerà mai se non c'è nulla da consumare perchè si blocca in lettura sulla pipe se la pipe è vuota.

2) Nella pipe ci possono essere al massimo due caratteri e, visto che scrivi meno di PIPE_BUF, sicuramente la scrittura è atomica e quindi niente race condition: due produttori possono scrivere sulla pipe tranqullamente visto che la scrittura di uno non può essere interrotta.

Non so bene cosa dire sulla questione della velocità perchè non ho capito cosa intendevi con:


il consumatore ha una velocità di "consumo" pari a 3 byte (3 char) per unità di tempo. La pipe deve ospitare al più due char (quindi due byte) per volta...

Intendi dire che devi assicurare che il consumatore, una volta schedulato, prelevi esattamente 3 byte ogni volta?

Loading