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

    [C] Problemino con Thread e scrittura su file

    Ciao a tutti.

    Ho un problemino con la scrittura sui file utilizzando i Thread in C su una macchina Linux.

    Faccio partire un sacco di Thread (100) che effettivamente attualmente fanno poco (creazione del file di LOG del thread, registrazione su una tabella, scrittura di qualche statistica, etc)

    Ogni volta che il Thread scrive sul file esegue le seguenti istruzioni

    dFile = fopen (sLogThreadFile, "a+");

    fprintf (dFile, "%s:%s-%s\n", sTyp, sTimeSt, sMsg);

    fflush (dFile);

    fclose (dFile);
    Il problema è che i thread sono così veloci nell'esecuzione, che mentre il thread "padre" sta scrive viene sostituito un suo messaggio con uno di quelli dei thread "figli"

    Come posso ovviare a questo problema?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Devi sincronizzare l'accesso al file con gli appositi oggetti di sincronizzazione (semafori, mutex ...).

    E' un classico problema ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    3
    Devi sincronizzare l'accesso al file con gli appositi oggetti di sincronizzazione (semafori, mutex ...).

    E' un classico problema ...
    Ehm ... potresti essere un po' più preciso?

    In realtà sto lavorando su un programma che ho ereditato ed è la prima volta che mi cimento con i thread.

    Esistono già pthread_mutex_init e pthread_mutex_destroy ma non vedo altre gestioni. Potrebbe essere questo il problema?

    Grazie in anticipo

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da Humino
    Ehm ... potresti essere un po' più preciso?
    Lo sono stato.

    Ti sembra il contrario solo perche' non sai di cosa stiamo parlando e l'argomento in questione e' molto vasto.

    In realtà sto lavorando su un programma che ho ereditato ed è la prima volta che mi cimento con i thread.
    Ecco ... il problema e' proprio questo.

    Dietro la programmazione multithreading ci sono dei concetti di base abbastanza semplici ma anche vasti, che devono essere studiati prima di affrontarla.

    E in un forum non si puo' dare una risposta che sta in pagine e pagine di libri.

    Esistono già pthread_mutex_init e pthread_mutex_destroy ma non vedo altre gestioni. Potrebbe essere questo il problema?
    Il problema e', come ti ho gia' detto, nella mancata sincronizzazione dell'accesso al file da parte dei thread.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    49
    in sostanza dovrai far si che solo un thread alla volta chiamando la pthread mutex lock possa accedere alla parte condivisa, una volta terminata l'operazione richiami la unlock per far si che altri thread possano accedere alla sezione critica

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    3
    in sostanza dovrai far si che solo un thread alla volta chiamando la pthread mutex lock possa accedere alla parte condivisa, una volta terminata l'operazione richiami la unlock per far si che altri thread possano accedere alla sezione critica
    Ho provato anche questo.
    Comincio a pensare che sia un problema di della variabile mutex che utilizzo.
    Deve essere globale, giusto?

    Grazie cmq per l'aiuto

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    49
    si usavo anche io il mutex come variabile globale. in pratica puoi far si che ascolti su una variabile di condizione fin quando un altro thread non da la signal e quindi puoi entrare nella sezione critica acquisendo il lock sul mutex. occhio a usare attentamente lock unlock per evitare deadlock ciao

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.