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 du 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 averti
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 31
    Par défaut Sémaphore du lecteur/rédacteur
    dans le probléme de redacteur/lecteurs,les lecteurs sont prioritaires,de ce fait il existe un risque de famine.prposer une solution qui qui élimine la famine et qui rend les rédacteurs prioritaires sur les lecteurs.en d'autres terme,dés qu'un redacteur réclame l'accés à un fichier(ressource),il doit l'obtenir le plus tot possible.donc tout lecteur arrivé aprés la demande du rédacteur doit attendre,méme si des lecteurs utilsent encore le fichier:
    solution:je n'ai utlisé que deux sémaphores mutex(pour proteger une variable comp_redacteur qui va étre consulté par les lecteurs et redacteurs)et redact(y'a pas une simultaniéte entre les redacteurs)
    on va proceder par l'algorithme
    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
     process redacteur;
    begin
        Si un redacteur est en exécution 
            alors se bloquer;{un seul redacteur accéde a la ressource}
        Sinon 
                        compteur_redacteur:=compteur_redacteur+1;
                        ecrire(mettre à jour);
                        compteur_redacteur:=compteu_redacteur-1;
       Si compteur_redacteur<>0
       alors reveiller un redacteur{qui etait dans la fille d'attente}
    end ;
    
    
     process lecteur;
    begin
    Sicompteur_redacteur<>0
    Alors ___;{mis dans la file d'attente}
    Sinon lire(consulter);
          reveiller un lecteur{un lecteur qui etait dans la file}
    end ;
    NB:LES PROCESSUS S'EXéCUTENT EN PARALLéLE.
    ma question
    doit on declarer un sémaphore pour le lecteur je me pose cette question car quand un rédacteur arrive il doit absolument utiliser la ressource(prioritaire) méme si un redacteur arrive au méme temps que lui et méme si si y'a des lecteurs qui utilisent cette ressource(car plusieurs lecteurs accédent à la ressource simultanément) donc on doit mettre le lecteur dans une file d'attente mais dans quelle fille????? ça peut pas étre celle des redacteurs!! dans mutex???? mais c juste pour proteger la variable compteur_redacteur.
    ALORS voila j'espére que cette fois c'est un peu plus lisible

  2. #2
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    Bon, j'ai eu beau mettre les balises code, le code n'est pas indenté et reste assez illisible... Pourrais-tu essayer de faire quelque chose ?

    Ensuite, avant d'écrire el code, il est fortement conseillé d'écrire l'algorithme à implémenter. Or j'ai beau lire le code, je ne comprends pas ton algorithme... Est-ce que tu pourrais essayer de nous remémorer exactement le problème (qui réveille qui, quand un rédacteur arrive, que veut dire qu'il est prioritaire (fin du travail du lecteur ou pause), ....)

    Cordialement,
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  3. #3
    Membre averti
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 31
    Par défaut
    VOILA j'ai ecris l'algorithme

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Merci bien pour les modifications, c'est beaucoup mieux

    Donc en fait, si je me souviens bien, il faut deux files d'attentes : une pour les rédacteurs et une pour les lecteurs.

    Lorsqu'un lecteur arrive, il doit vérifier que la file d'attente des rédacteurs est vide. Si tel est le cas, alors il lit, puis appelle un autre lecteur quant il a finit (qui vérifie pour sa part s'il y a un rédacteur en attente ou non).

    Seul soucis que je vois : si les rédacteurs arrivent en continue, il y a famine du point de vue des lecteurs, et allongement infini du nombre de lecteur. Mais il ne peut pas y avoir famine du point de vue des rédacteurs.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  5. #5
    Membre averti
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 31
    Par défaut
    avant cet algorithme y'avait le probléme de famine pour les REDACTEURS car on autorisé l'accés a plusieurs lecteurs et simultanément.
    Maintenen on veut y remedier en rendant les redacteurs prioritaires donc y'aura un autre probléme de famine aussi apparament,mais moi la question qui me derrange est ou allons nous mettre les lecteurs qui arrivent aprés les redacteurs??? sacahnt que je n'ai pas utilsé de sémaphore pour les lecteurs car je vois pas l'interet de l'utiliser vu que j'ai plusieurs lecteurs qui consultent le fichier SIMULTANEMENT biensure sans qu'il y'ai de redacteur!!
    peut étre que ma façon de raisonner est fausse je sais pas!!!! essayez de dire ce que vous avez compris s'i vous plait!

  6. #6
    Membre averti
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 31
    Par défaut
    voici ce que j'ai trouvé de mieux je crois pou l'algorithme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     processus redacteur;                               
     SI y'a un redacteur alors attente;
      sinon 
    compteur-redacteur:=compteur-redacteur+1;{entrée}
         (mise à jour);
    compteur:=compteur-1;
        reveiller un LECTEUR;{sortie}
     
                                                    process lecteur;
                                                      SI compteur-recateur=1 alors attente;
                                                    SINON  (consulter);
                                                       reveiller un redacteur;{sortie}
    voici avec les semaphores mais je suis pas sure
    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
    REDACT;
      begin
                      p(redact);{si <0 alors attente}
                      p(mutex);
                     compteur-redacteur:=compteur-redacteur+1;
                     (mise à jour);
                     v(mutex);
                     p(mutex);{pour consulter la variable partageable}
                     compteur-redacteur:=compteur-redacteur-1;{reveiller 1 lecteur}
                    v(mutex)
     end;
    
    pour le lecteur j'ai pas pu implémenté le sémaphore
    LECTEUR;
    begin
      SI compteur-redacteur=1 alors attente;
    sinon(lire,consulter);
       V(redact){reveiller un redacteur si y'en a dans la file
    end;

Discussions similaires

  1. Sémaphore lecteur rédacteur
    Par bazoga dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 10/04/2014, 09h52
  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/redacteur
    Par chelsea23 dans le forum Windows
    Réponses: 8
    Dernier message: 02/01/2007, 19h39

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