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

C Discussion :

pthread lecteurs ecrivains.


Sujet :

C

  1. #1
    Membre régulier

    Inscrit en
    Avril 2004
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 78
    Points : 74
    Points
    74
    Par défaut pthread lecteurs ecrivains.
    Bonsoir,


    J ai n lecteurs et 1 ecrivains.
    l ecrivain ecrit dans des fichier une seul fois. Avant l ecriture, les lecteur ne peut pas lire, mais pres il peuvent lire sans avoir besoin d exclusion mutuelle.

    J ai donc cree une structure comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    typdef struct file
    {
        char *file_name;              // nom du fichier
        int is_ready;                   // permet de savoir si le fichier est pret a etre lu.
        pthread_mutex_t mutex; // avoir acces au fichier de maniere exclusive.
        pthread_cond_t cond;
    }
    Le pseudo langage :

    lecteurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    - lock mutex
    - si is_ready = 0
    - unlock mutex.
    -on lit le fichier.

    ecrivain:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    - lock mutex
    - On ecrit dans le fichier.
    - is_ready = 1
    - on reveille tous les lecteurs.
    -unmock mutex.

    Je ne sais pas si c est la meilleur facon
    De plus quand l ecrivain a fiit d ecrire, le mutex et la condition ne servent plus a rien. J aimerai avoir vos commentaire pour ameliorer ce code.


    Merci.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    A quoi ça sert tout ça ?

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par Mr_Chut
    il peuvent lire sans avoir besoin d exclusion mutuelle.
    Question d'un novice : il sert à quoi le mutex si il n'y a pas besoin d'exclusion mutuelle ?

  4. #4
    Membre régulier

    Inscrit en
    Avril 2004
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 78
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par David.Schris
    Question d'un novice : il sert à quoi le mutex si il n'y a pas besoin d'exclusion mutuelle ?
    il faut bien que les lecteurs verifient si le fichier est pret ou non, car un lecteur ne doit pas lire en meme temps que l ecrivain ecrit.

    De plus j utilise le mutex car une variable de type pthread_cond_t est toujours associe a un pthread_mutex_t.

    Et si tu lis bien, je dis que les lecteur peuvent lire le fichier sans exclusion mutuelle seulement apres que l ecrivain est ecrit dans le fichier, car l ecrivain ecrit seulement une fois dans chaque fichier.

  5. #5
    Membre expérimenté
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Points : 1 421
    Points
    1 421
    Par défaut
    je pense que tu utilise mal les mutex (le mutex et le cond). montre nous ton code épuré (mais compilable) qui nous montre comment tu utilise les mutex.

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par Mr_Chut
    il faut bien que les lecteurs verifient si le fichier est pret ou non, car un lecteur ne doit pas lire en meme temps que l ecrivain ecrit.

    De plus j utilise le mutex car une variable de type pthread_cond_t est toujours associe a un pthread_mutex_t.

    Et si tu lis bien, je dis que les lecteur peuvent lire le fichier sans exclusion mutuelle seulement apres que l ecrivain est ecrit dans le fichier, car l ecrivain ecrit seulement une fois dans chaque fichier.
    Et si tu lis bien, tu as aussi écrit "- on reveille tous les lecteurs." ce qui sous entend qu'il étaient endormis avant que le fichier ne soit créé et donc qu'ils ne pouvaient de toutes façons pas lire le fichier avant que l'écrivain n'ait terminé...enfin, peu importe...

    Je rejoins Dark_Ebola dans sa demande de code épuré compilable...

Discussions similaires

  1. Lecteurs / Ecrivains : probleme de priorite
    Par Invité dans le forum Bibliothèques
    Réponses: 0
    Dernier message: 05/04/2008, 01h44
  2. [Lecteur] Lettre du lecteur de CD
    Par petit scarabée dans le forum Installation, Déploiement et Sécurité
    Réponses: 6
    Dernier message: 05/09/2002, 19h47
  3. Connecter un lecteur reseau
    Par manusweb dans le forum C++Builder
    Réponses: 4
    Dernier message: 03/09/2002, 13h07
  4. Bloquer le lecteur cd
    Par krusaf dans le forum MFC
    Réponses: 3
    Dernier message: 07/07/2002, 14h09
  5. Réponses: 2
    Dernier message: 04/06/2002, 11h34

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