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

Algorithmes et structures de données Discussion :

Sémaphore lecteur rédacteur


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2009
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 96
    Par défaut Sémaphore lecteur rédacteur
    Bonsoir,

    je veux modifier le code suivant afin de limiter le nombre de lecteurs autorisés à un nombre donnée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Data: mutexEcriture : mutex initialisé à libre
    Data: mutexFifo : mutex initialisé à libre
    Data: mutexNbLect : mutex initialisé à libre
    Data: entier : NbLect initialisé à 0
    Procédure debutLecture()
    begin
        Prendre(mutexFifo) ;
        Prendre(mutexNbLect) ;
        nbLect   nbLect + 1 ;
        if nbLect = 1 then Prendre(mutexEcriture);
        Liberer(mutexNbLect) ;
        Liberer(mutexFifo) ;
    end
    Procédure finLecture()
    begin
        Prendre(mutexNbLect) ;
        nbLect   nbLect -1 ;
        if nbLect = 0 then Liberer(mutexEcriture);
        Liberer(mutexNbLect) ;
    end
    Procédure debutEcriture()
    begin
        Prendre(Fifo);
        Prendre(mutexEcriture) ;
        Liberer(mutexFifo) ;
    end
    Procédure finEcriture()
    begin
        Liberer(mutexEcriture) ;
    end
    le code suivant permet de résoudre le problème classique du lecteur/rédacteur sans priorité (accès fifo), un groupe de lecteurs de taille quelconque peut accéder à la section critique, mon objectif est de limiter la taille du groupe à un nombre k par exemple.

    Merci de m'aider
    A+

  2. #2
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    utilise les conditions, du style wait(cond, mutex) et signal(cond). voir moniteur, section condition variable.

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2009
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 96
    Par défaut
    Citation Envoyé par Trademark Voir le message
    utilise les conditions, du style wait(cond, mutex) .....
    Merci pour le retour mais je veux utiliser seulement les sémaphore.

    E.BAzOgA

  4. #4
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    Alors faut que tu utilises une boucle active dans laquelle tu vas lock checker si tu peux passer et puis unlock jusqu'à ce que tu puisse passer. Mais c'est vraiment pas une bonne solution dans ton cas.

Discussions similaires

  1. Code Lecteur Rédacteur
    Par apelleti dans le forum C
    Réponses: 2
    Dernier message: 01/12/2009, 17h38
  2. un modèle spécial du lecteur rédacteurs
    Par aroussi_sanaa dans le forum Général Java
    Réponses: 6
    Dernier message: 04/05/2009, 08h19
  3. Réponses: 6
    Dernier message: 27/03/2007, 08h23
  4. Sémaphore du lecteur/rédacteur
    Par chelsea23 dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 04/01/2007, 12h59

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