Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    71

    [C] server multithreader

    Ciao ragazzi, ho un problema nella progettazione di un server multithread con l'uso della libreria pthread.h

    Il mio problema è il seguente: devo creare un thread che controlli se un file è modificato e ripeta questa operazione ogni NSEC secondi. In più ogni richiesta di un client deve essere gestita da un thread atto allo scopo. Io ho pensato a questo codice per il thread che controlla la modifica del file. Le funzioni utilizzate sono testate e funzionanti!

    static void *isModified (void *args) {

    while (TRUE) {
    struct arguments *arg = (struct arguments *) args;
    if (/*controllo se è stato modificato*/) {
    /** Devo usare i semafori per prendere abr in mutua esclusione? */

    freePerm(arg->root);
    arg->root = NULL;
    loadPerm(arg->file, &(arg->root));

    }
    sleep(NSEC)
    }
    }

    Adesso viene il problema. Quando vado a creare l'altro thread per rispondere ad un client deve essere interrotto ogni NSEC secondi per far tornare in esecuzione "isModified" apparte in un punto che deve chiamare una funzione che lavora sul file.

    Non so se sono riuscito a spiegarmi al meglio. se avete problemi sulla comprensione chiedete pure sono a vostra completa disposizione... spero di ricevere qualche aiuto perchè sono decisamente fermo

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    A occhio potresti usare una pthread_condition per fermare in un punto preciso gli altri thread.
    http://www.sourceware.org/pthreads-w...cond_init.html
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    71
    Si, ci avevo pensato....ma non saprei in che modo utilizzarle...nel senso che nn so quale condizione deve rispettare....

    la sleep che ho messo non basta a far rientrare in esecuzione il thread dopo NSEC secondi? non saprei veramente come fare... ti è possibile farmi vedere un piccolissimo esempio?

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    71
    Purtroppo ho anche un altro problema...

    Mi serve di tenere una lista (o qualche struttura dati specifica) dei client connessi al server centrale...utilizzare un array è praticamente impossibile che poi dovrei tenermi anche l'indice di dove sono memorizzati e viene fuori un macello (CREDO!)

    Potrei utilizzare una lista fatta ad hoc per il problema? Facendo la listen però mi limito il numero di connessioni che il server può accettare...la accept poi pensa da sola a rifiutarle o tenerle in sospeso se quel numero viene superato?

    Grazie in anticipo e scusate la mia ignoranza

  5. #5
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    L'esempio del link mi sembra simile al tuo problema, che altro potrei aggiungere?

    Che sia una lista o altro, ricorda di proteggerla con un mutex se fai anche solo un accesso in scrittura.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    71
    L'esempio è ottimo...ti ringrazio!! Per la lista credo di aver risolto i miei problemi mantenendo i client attivi al suo interno.... per il fatto della accept()? Fa in automatico di rifiutare connessioni quando viene superato il limite imposto dalla listen() precedente?

    PS: Un'altra domanda....(penso che sto superando il tuo limite massimo di pazienza!!). Il thread che ho attivato deve vedere se il file che gli passo come parametro è stato modificato...All'interno della funzione secondo te devo riaprire un nuovo file e controllare se è uguale oppure c'è una funzione particolare in C??

  7. #7
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Se serializzi l'accesso, apri, scrivi e chiudi il file prima di lasciare la sezione critica, dovrebbe bastare il controllo dei parametri del file, in particolare l'ultimo accesso.
    Il come dipende dal sistema operativo.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

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.