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

Linux Discussion :

IPC : faut-il utiliser un sémaphore avec les files de messages?


Sujet :

Linux

  1. #1
    Membre régulier Avatar de yostane
    Homme Profil pro
    test
    Inscrit en
    Mars 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : test

    Informations forums :
    Inscription : Mars 2006
    Messages : 84
    Points : 106
    Points
    106
    Par défaut IPC : faut-il utiliser un sémaphore avec les files de messages?
    bonjour à tous
    Je suis en train de faire un TP sur les IPC systèmeV sous mandriva 2005. Ma question est : si plusieurs processus travaillent sur une même file de messages en utilisant msgsnd et msgrcv, doit-on utiliser un sémaphore pour assurer l'exclusion mutuelle ou bien c'est géré par le noyau.
    merci de votre aide et bon courage.

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par yostane
    bonjour à tous
    Je suis en train de faire un TP sur les IPC systèmeV sous mandriva 2005. Ma question est : si plusieurs processus travaillent sur une même file de messages en utilisant msgsnd et msgrcv, doit-on utiliser un sémaphore pour assurer l'exclusion mutuelle ou bien c'est géré par le noyau.
    merci de votre aide et bon courage.
    1) Rien est écrit dans la page man donc il faut supposer que ce n'est pas géré.
    2) Si c'était géré, cela rendrait la fonction plus lente qu'il ne faut dans le cas où c'était inutile.

    Donc je pense qu'il faut le gérer soi-même,
    Jc

  3. #3
    Membre régulier Avatar de yostane
    Homme Profil pro
    test
    Inscrit en
    Mars 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : test

    Informations forums :
    Inscription : Mars 2006
    Messages : 84
    Points : 106
    Points
    106
    Par défaut
    bonjour et merci d'avoir répondu.
    Cela signifie que mon code doit être de la forme:

    P(semaphore)
    msgrcv(...) ou msgsnd(...)
    V(semaphore)

    j'ai essayé un programme avec deux processus qui veulent accéder à une même en lecture et écriture sans sémaphores, et ça marche bien. Est-ce une coïncidence ?

    Dernière question, si je lis le code source de msgsnd, est-ce que ça pourrait répondre à ma question

    merci encore.

  4. #4
    Membre régulier Avatar de yostane
    Homme Profil pro
    test
    Inscrit en
    Mars 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : test

    Informations forums :
    Inscription : Mars 2006
    Messages : 84
    Points : 106
    Points
    106
    Par défaut
    J'ai trouvé le code source de msgrcv

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    asmlinkage long sys_msgrcv (int msqid, struct msgbuf __user *msgp, size_t msgsz,
    662                             long msgtyp, int msgflg)
    663 {
    664         struct msg_queue *msq;
    665         struct msg_msg *msg;
    666         int mode;
    667 
    668         if (msqid < 0 || (long) msgsz < 0)
    669                 return -EINVAL;
    670         mode = convert_mode(&msgtyp,msgflg);
    671 
    672         msq = msg_lock(msqid);
    normalement, ça veut dire que l'exclusion mutuelle est gérée, n'est-ce pas?
    merci pour vos réponses.

  5. #5
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Attention, cela veut dire qu'une implémentation gére les mutex, pas que toutes les implémentations le gérent.

    Pour le savoir, il faudrait lire attentivement la définition de la fonction,

    Jc

  6. #6
    Membre régulier Avatar de yostane
    Homme Profil pro
    test
    Inscrit en
    Mars 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : test

    Informations forums :
    Inscription : Mars 2006
    Messages : 84
    Points : 106
    Points
    106
    Par défaut
    toutes les versions du noyau appellent cette fonction ipc_lock.
    Ce qui m'intrigue, c'est qu'ils citent les sémaphores avec la mémoire avec la mémoire partagée mais jamais avec les files de message. Ce qui veut dire qu'on peut ne pas utiliser les sémaphores avec les files de messages.
    merci et bon courage

Discussions similaires

  1. Utilisation des PGN avec les navigateurs IE & FF
    Par HWICE dans le forum Internet
    Réponses: 7
    Dernier message: 17/01/2008, 20h21
  2. Réponses: 3
    Dernier message: 22/09/2007, 13h56
  3. Utilisation de sed avec les variables dans un Shell
    Par mbole dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 05/07/2007, 17h46
  4. Utilisation de foreach avec les sessions sous PHP5
    Par frochard dans le forum Langage
    Réponses: 1
    Dernier message: 11/11/2006, 01h14
  5. (Débutant API) Utilisation de Richedit avec les APIs
    Par LibrairieSI dans le forum Windows
    Réponses: 2
    Dernier message: 10/08/2005, 16h53

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