Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    80

    [C] lettura da file con thread

    Ciao a tutti,
    devo leggere da un file alcuni numeri con 4 thread, sincronizzandone l'accesso tramite mutex. Supponendo che il file venga passato come argomento da linea di comando, mi chiedevo se i seguenti modi per condividere il mutex e il file pointer sono equivalenti:

    1) Far si che mutex e file pointer al file da leggere siano variabili globali

    codice:
    #include <....>
    
    pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;
    FILE *fp;
    
    int main(int argc,char *argv[]){
    
        fp=open_file(argv[1]);
    }
    2)creare una struttura dati per contenere le info necessarie ai thread e poi procedere in questo modo:

    codice:
    #include <....>
    
    struct data
    {
       pthread_t tid;
       pthread_mutex_t *ptmx;
       FILE *f;
    
      .....
    }
    
    int main(int argc,char* argv[])
    {
       FILE *fp=open_file(argv[1]);
       struct data td[5];
       pthread_mutex_t mtx;
    
       pthread_mutex_init(&mtx,NULL)
    
       //associazione con i campi della struttura dati
       for(i=0;i<5;i++)
       {
          td[i].f=fp;
          td[i].ptmx=&mtx;
       }
    
       ....
    }
    grazie
    PS. ho risportato solo le parti di codice più salienti, quindi non fate caso se manca il controllo degli errori!

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Puoi ottenere lo stesso risultato in entrambi i modi, tuttavia il secondo approccio è sempre preferibile rispetto al ricorso a variabili globali, che rischiano di incasinare ad arte il tutto (in particolare quando hai molti thread e quando le interazioni tra essi sono complesse). Visto che la pthread_create() ti dà la possibilità di passare argomenti alla funzione invocata dal thread, ti conviene sfruttarla.
    every day above ground is a good one

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    80
    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.