Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: [C] fork

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    168

    [C] fork

    Ciao a tutti!
    Avrei bisogno di un aiuto...

    Vorrei fare questo:
    - un processo fa fork in un ciclo for per creare 'n' figli
    - ciascun figlio deve poter modificare la variabile 'n' (decrementare)
    - il processo padre a seconda del valore di 'n' (modificato dai figli) deve fare nuove fork: se n è minore di un certo valore deve fare un tot di nuove fork

    Come posso fare? Non riesco proprio a capirlo

  2. #2
    I figli sono processi indipendenti dal padre, non possono decrementarne una variabile... se vuoi che condividano lo stesso spazio di indirizzi devi creare dei thread, non dei processi.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    168
    Ma se io utilizzassi una pipe? Però non so bene come perché comunque tutti dovrebbero modificare una stessa variabile...

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    168
    Nessuno che mi dia un aiuto?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    168
    Ma se la variabile 'n' la dichiarassi come variabile globale?

    Tutti i figli potrebbero modificarla e il padre leggere le modifiche?

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    168
    Quote Originariamente inviata da Dany_ Visualizza il messaggio
    Ma se la variabile 'n' la dichiarassi come variabile globale?

    Tutti i figli potrebbero modificarla e il padre leggere le modifiche?
    Ok ho detto una cavolata
    Rimango sull'utilizzo di una pipe... i figli modificano la variabile, scrivono il valore in una pipe e il padre legge dalla pipe e assegna il valore alla variabile... è corretto come ragionamento?

  7. #7
    Sì, è un buon sistema; in alternativa puoi usare la shared memory, ma devi gestire i problemi di sincronizzazione (sostanzialmente devi usare o un mutex/semaforo o interi atomici).
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    168
    Grazie!
    Infatti sto cercando di usare la memoria condivisa + un semaforo...ma ho ancora un po' di problemi!

    Una volta riuscita a fare questo, come faccio a fare in modo che il padre crei figli in base al valore che legge?
    Cioè:
    - il padre fa n fork
    - i figli cominciano a lavorare perciò modificano continuamente (sincronizzati dal mutex) la variabile n
    - il padre nel frattempo (mentre i figli lavorano) leggendo i cambiamenti di n dovrebbe creare più figli oppure ucciderne qualcuno (se n è troppo grande)

    Come dovrei fare? Un ciclo infinito?

  9. #9
    Mi sembra un pattern un po' strano... se spieghi il problema effettivo che stai cercando di risolvere forse c'è qualche sistema un po' più pulito.
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    168
    Dovrei implementare un server che faccia un preforking dei figli. I figli saranno poi occupati a soddisfare le richieste, perciò varia il numero di figli liberi. Il padre deve controllare il numero di figli liberi (che non stanno lavorando): se questo numero scende sotto un certo valore è necessario creare nuovi figli.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.