Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [C] - Pipe, dimensiona massima della scrittura

    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

  2. #2

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    93
    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.

  4. #4
    a me servirebbe che il processo produttore deve immettere nell pipe un massimo di x byte, inferiore ovviamente alla dimensione massimo della byte...

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    93
    OK...ma il valore di "x" lo devi stabilire all'inizio, deve darlo l'utente....posta qualche dettaglio in più e magari del codice

  6. #6
    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...

  7. #7
    aiutooooooooo

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    93
    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 )

  9. #9
    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?

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    93
    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?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.