Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [C] Quacosa di Alternativo alla Memoria Condivisa?

    Devo creare un programma che:
    - Il Padre Crea n processi figli (tanti) e gestisce un Hashtable (o cmq un po' di dati in RAM)
    - Ogni Figlio deve poter accedere all'Hashtable in qualche modo...

    Io avevo pensato di utilizzare la memoria condivisa...
    Visto che tutti i processi devono andare a leggere quei dati...
    Ma non son totalmente convinto della mia scelta...
    Qualcuno puo' darmi qualche suggerimento?

    Un altra cosa... Il Figlio potrebbe voler modificare un dato (dell'Hashtable)... Conviene inviare la richiesta al padre o se lo puo' fare direttamente lui?

    grazie.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    La memoria condivisa puo' essere una soluzione e il "figlio" puo' scrivere direttamente ma a patto di "sincronizzare" questa azione con i "concorrenti" (altri figli o il padre).

    Per farlo devi usare un oggetto di sincronizzazione (un mutex, un semaforo ... vedi tu quale ...).

  3. #3
    ok... grazie mille oregon
    ma c'e' qualcosa di migliore ? o ritieni che sia gia' un buon metodo ?

    Grazie ancora

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Dipende dalla quantita' di dati "scambiata" ... potresti utilizzare winsock o, meglio, i messaggi di Windows (WM_COPYDATA in particolare)

  5. #5
    Si tratta di Inter Process Comunication (IPC), ci sono vari metodi per svolgerla : pipes, memoria condivisa, clipboard, mailbox e altre ancora mi sembra.
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  6. #6
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    Originariamente inviato da oregon
    Dipende dalla quantita' di dati "scambiata" ... potresti utilizzare winsock o, meglio, i messaggi di Windows (WM_COPYDATA in particolare)
    Se parla di padri e figli credo sia su unix perche se nn erro su windows nn c'è questo tipo di rapporto fra i processi. I due processi sono indipendenti ed è possibile gestirne uno tramite una handle che chiunque, nn necessariamente il padre, puo avere.


    Il tutto, ovviamente, se mi ricordo ancora qualcosa dal corso di sistemi operativi
    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da infinitejustice
    Se parla di padri e figli credo sia su unix perche se nn erro su windows nn c'è questo tipo di rapporto fra i processi. I due processi sono indipendenti ed è possibile gestirne uno tramite una handle che chiunque, nn necessariamente il padre, puo avere.


    Il tutto, ovviamente, se mi ricordo ancora qualcosa dal corso di sistemi operativi
    In realta' in Windows un "child process" e' un processo che e' stato creato da un altro processo, chiamato "parent process". Il rapporto che esiste tra i due processi c'e', ma e' differente con quello di Unix.

    Ovviamente, e' vero che la creazione dei processi nei due sistemi e' abbastanza differente, ma alcuni concetti "di base" sono validi in ambedue gli ambienti e le tecniche di IPC sono abbastanza simili.

    In effetti la richiesta sembra piu' per Linux/Unix ma questo significa usare i socket invece di winsock e molte primitive di sincronizzazione molto simili che comunque esistono ...

  8. #8
    Ho un altro piccolo problema che mi sta'
    facendo cambiare idea sulla memoria
    condivisa... Quello che devo mettere in
    memoria condivisa sono delle informazioni
    relativi all'utente (quindi stringhe allocate dinamicamente)
    e un socket che e' di questo tipo:
    codice:
    typedef struct _ny_socket {
    	NySockDescriptor fd;
    	SSL *ssl;
    	SSL_CTX *ctx;
    	NySocketState state;
    } NySocket;
    dove 'ssl' e 'ctx' sono due variabili allocate dinamicamente

    Stavo pensando di sostituire la memoria condivisa con un
    database almeno per quanto riguarda le informazioni utenti...
    ma per il socket? come faccio? Posso salvarlo sul DB? (MySQL)
    Oppure avete qualche altra idea?

    Grazie

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.