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 :

Moniteur sans posix


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 756
    Points : 376
    Points
    376
    Par défaut Moniteur sans posix
    Bonjour,

    je poste dans ce topic car je ne vois pas d'autre forums pour accueillir la question. Pardon s'il y a plus adapté.

    Mais pour être clair, ma question ne concerne pas une implémentation du moniteur en C directement avec des les mutex posix; mais bien la théorie générale des moniteurs dans laquelle on s'accorde à dire qu'il y a exclusion mutuelle de base.

    Bref, voici l'énoncé:


    On considère des processus producteurs et consommateurs qui partagent, sans perte de messages,
    une boîte à lettres circulaire de taille N.

    Dans la première variante considérée, les producteurs et les consommateurs utilisent la boîte à
    lettres au travers des deux opérations : Put et Get.

    o Put(m) dépose le message m dans une nouvelle case de la boîte à lettres;
    et Get(&m) retourne le message m à l'appelant et la case contenant m devient vide.

    Donner le code (en pseudo-code algorithmique) du moniteur permettant la synchronisation
    souhaitée. Pour cela :

    --> Donner l'interface du moniteur mettant à disposition les opérations permettant aux deux
    types de processus mis en jeu de synchroniser leurs accès à la boîte à lettres partagée selon
    les contraintes imposées.

    --> Exprimer les conditions de blocage/déblocage des deux types de processus voulant accéder
    à la boîte à lettres. En déduire les variables d'état et les variables « condition » utilisées dans
    le moniteur.

    --> Donner le code des algorithmes des opérations que le moniteur met à disposition.

    Ce que j'ai fais:

    * Spécification du moniteur


    ecrireDansBoite(int iBoite, Message m)
    lireDansBoite(int iBoite, Message *m)
    *Condition blocage deblocage

    Un producteur est bloqué si la boite au lettre est pleine (iBoite = N)
    Un conso est bloqué si la boite au lettre est vide (iBoite =0)
    Un producteur est débloqué par un consommateur terminant de lire (iBoite < N)
    Un consommateur est débloqué par un producteur terminant d'écrire (iBoite > 0)

    Condition accesBoiteConso;
    Condition accesBoiteProd;
    iBoite;
    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
    *code moniteur
     
    initialisation(){
        iBoite = 0;
    }
     
    ecrireDansBoite(int iBoite,Message m){
        if(iBoite==N){
            accesBoiteProd.wait();
        }
        put(m);  
        iBoite++: 
        accesBoiteConso.signal();
    }
     
    lireDansBoite(int iBoite,Message *m){
        if(iBoite==0){
            accesBoiteConso.wait();
        }
        get(&m);
        iBoite--;
        accesBoiteProd.signal();
    }
    Il semblerait toutefois que ce que j'ai fais ici ne soit pas bon.

    Il y a vraisemblablement deux problèmes bien connus (Producteurs / Consommateurs et Lecteur/Rédacteurs) et j'ai apparemment utilisé le mauvais ici d'après ce que l'on me dit, mais je ne comprends pas pourquoi.

    Quelqu'un pourrait-il m'expliquer ?

    Merci à vous

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 737
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 737
    Points : 31 065
    Points
    31 065
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Amnael Voir le message
    je poste dans ce topic car je ne vois pas d'autre forums pour accueillir la question. Pardon s'il y a plus adapté.
    Peut-être algorithmique...

    Citation Envoyé par Amnael Voir le message
    Il y a vraisemblablement deux problèmes bien connus (Producteurs / Consommateurs et Lecteur/Rédacteurs) et j'ai apparemment utilisé le mauvais ici d'après ce que l'on me dit, mais je ne comprends pas pourquoi.
    Quelqu'un pourrait-il m'expliquer ?
    Dans l'énoncé on parle d'une boite à lettres circulaires, cela apporte peut-être une nuance. Dans le schéma producteur/consommateur je vois ça comme un tube qu'on remplit d'un coté et qu'on vide de l'autre. Alors que ta boite circulaire je la verrais plus comme un crayon qui tourne et qui écrit pendant qu'un lecteur optique tourne derrière et lit. Ca ressemble plus à un schéma rédacteur/lecteur non ??? Ceci dit, je ne vois pas trop ce que ça change quand la boite est vide (le lecteur est bloqué) ou quand la boite est pleine (là c'est l'écrivain)...

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 01/11/2017, 03h14
  2. Utiliser les threads POSIX sans OS
    Par Marc9101 dans le forum POSIX
    Réponses: 9
    Dernier message: 05/06/2015, 17h59
  3. POSIX : MSG QUEUE / Lecture sans extraction
    Par chicorico dans le forum C
    Réponses: 6
    Dernier message: 17/11/2011, 19h04
  4. MDI sans MFC, possible ?
    Par delire8 dans le forum MFC
    Réponses: 4
    Dernier message: 17/06/2002, 08h38
  5. [Kylix] Fiches sans bordure
    Par alex dans le forum EDI
    Réponses: 4
    Dernier message: 28/04/2002, 22h19

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