IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Threads & Processus C++ Discussion :

Ecriture fichier multithreading


Sujet :

Threads & Processus C++

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 58
    Par défaut Ecriture fichier multithreading
    Bonjour,

    J'ai un programme qui calcule les nombres premier jusqu’à une valeur X (et avec un nombre de thread entré par l'utilisateur), le programme parcourt et teste chaque nombre si un nombre et premier il l'écrit dans un fichier.

    Le souci est que je me retrouve des fois avec plusieurs nombre sur la même ligne.

    Exemple: thread1 calcul de 0 à 10, thread2 11 à 20, et j'aurais sur une ligne 213 (le 2 du thread1 et le 13 du thread2)

    Je pense que cela est du au fait que plusieurs threads écrivent en même temps dans le fichier.

    Voici le code de la partie d'écriture:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    		while(n<(localDonnees->tabVal[i]) && estPremier)
    		{
    			if((localDonnees->tabVal[i])%n == 0)
    					estPremier=false;
    			n++;
    		}
     
    		if(estPremier)
    		{
    			filestream <<  localDonnees->tabVal[i] << "\n"; //Ecriture des premiers dans un fichier
    		}
    J'ai aussi essayé en castant mes int en string et en leur rajoutant \n à la fin mais toujours le même problèmes.

    Avez-vous une solutions pour bien les écrires les uns à la suite des autres ?

    (Et accessoirement j'aimerai bien que ce soit écrit dans l'ordre croissant, et pas "random" en fonction des threads)


    Merci

  2. #2
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Billets dans le blog
    21
    Par défaut
    Tu as de bonnes intuitions: quand tu as une ressource partagée entre les threads, et qu'ils y accèdent sans ordre / protection, le comportement devient aléatoire.
    Il faut un système de locks (tu as plusieurs modèles mais celui-ci conviendrait à un programme simple comme celui-là): le thread acquiert la ressource (le fichier) pour lui tout seul, écrit, puis le libère pour que les autres puissent y accéder. Il faut que tu ailles faire une petit tour sur un tuto c++ multithreadé.

    Pour le tri, c'est un peu contraire à l'esprit thread: la seule solution est qu'au lieu d'accéder à un fichier, tes threads accèdent à un vecteur que tu tries ensuite avant d'écrire dans le fichier.

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 58
    Par défaut
    Le système de lock ne ferait pas perdre trop de temps ? Le but de la manœuvre est de tester la différence en temps d’exécution entre le programme multithreadé et un programme séquentiel.

    J'avais déjà essayé de mettre en place un vector, qui ensuite était trié pour les écrires dans l'ordre croissant, mais j'avais une erreur lors de l'éxécution au niveau de la mémoire, je pense maintenant que cela était du à peu pres au même problème: 2threads tentaient d'écrire dans la même case du vector en même temps.

    Donc si je met en place un système de lock sur le vector, je pourrais écrire les threads les uns après les autres dessus pour après le trier (mon idée première)

    Mais du coup si on les écrits et donc les calcules les uns après les autres ca reviens à faire du séquentiel non ?

    Edit: Je ne me suis jamais attardé sur le système de lock donc peut-être que je dit des trucs insensés

  4. #4
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Billets dans le blog
    21
    Par défaut
    Le plus logique c'est de séparer les calculs et l'inscription dans le fichier.

    De toute façon, comme l'IO est le plus lent et plus ou moins impossible à multithreader tu ne constateras des gains que sur les calculs

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 58
    Par défaut
    Merci beaucoup pour vos réponses, ca marche j'ai écrit d'abord dans des vector que j'ai lock (plus facilement que je ne le pensais au début). Puis après j'ai écrit le contenu de mes vectors dans les fichier ca marche niquel! Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. php: lecture ecriture fichier
    Par kda007 dans le forum Langage
    Réponses: 2
    Dernier message: 07/02/2006, 18h49
  2. [C#][debutant]creation + ecriture fichier
    Par ChristopheOce dans le forum Windows Forms
    Réponses: 4
    Dernier message: 27/01/2006, 08h28
  3. [AS2] Lecture Ecriture Fichier Texte
    Par cpr0 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 4
    Dernier message: 13/09/2005, 11h22
  4. [LG]Lecture-ecriture fichier
    Par arno15 dans le forum Langage
    Réponses: 19
    Dernier message: 03/02/2005, 22h25
  5. Lecture et ecriture fichier .ini
    Par despe dans le forum C
    Réponses: 6
    Dernier message: 23/07/2003, 20h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo