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 :

Semaphore sous linux


Sujet :

Linux

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 293
    Points : 188
    Points
    188
    Par défaut Semaphore sous linux
    Bonsoir,

    J'apprend à synchroniser un processus pere avec un fils (le modele du producteur consommateur). J'utilise pour cela les sémaphores et je m'aide d'exemples sur le net.

    à savoir que j'ai utilisé un seul jeu de sémaphore avec 1 seul sémpahore.

    là ou j'ai du mal dans mon programme c'est au niveau de cette fonction

    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
     
    /* --------------------------------------------------------------------------
       operation_sur_semaphore ()
       --------------------------------------------------------------------------
       Role : permet d'effectuer une operation sur un semaphore (decrementation ou
              incrementation)
              Retourne 0 si succes, -1 sinon
       -------------------------------------------------------------------------- */
    int operation_sur_semaphore (int num_jeu_semaphore, int valeur_operation)
    {
       /* On cree une structure sembuf qui nous permettra d'effectuer l'operation
          voulue sur le semaphore */
       struct sembuf operation[1];
     
       /* On choisi le semaphore sur lequel on desire effectuer l'operation */
     
       /* Ici on travaille sur 1 seul semaphore (le semaphore n° 0) */
       operation[0].sem_num = 0;
     
       /* on selectionne la valeur de l'operation a effectuer */
       operation[0].sem_op = valeur_operation;
     
       /* On positionne le flag sur 0 : operation bloquante + SEM_UNDO : eviter
          l'interblocage */
       operation[0].sem_flg = 0 | SEM_UNDO;
     
       /* La structure sembuf est correctement initialisee on fait appel a semop
          pour agir sur le sempahore correspondant */
       return semop (num_jeu_semaphore, operation, 1);
    }
    dans semop (num_jeu_semaphore, operation, 1);

    à quoi correspnd le 1 en dernier paramètre ?


    Merci

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par exhortae Voir le message
    à quoi correspnd le 1 en dernier paramètre ?
    C'est le nombre de structures sembuf passées à la fonction
    voir ici l'aide en français par exemple : http://www.linux-kheops.com/doc/man/...2/semop.2.html

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    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 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par exhortae Voir le message
    dans semop (num_jeu_semaphore, operation, 1);

    à quoi correspnd le 1 en dernier paramètre ?


    Merci
    Citation Envoyé par ram_0000 Voir le message
    C'est le nombre de structures sembuf passées à la fonction
    En fait, l'opération qui est faite sur un sémaphore (ou sur un groupe de sémaphores) est atomique. Par exemple si tu veux coder la prise de deux sémaphores mais que l'un des deux n'est pas disponible, il ne faut pas que l'autre soit pris inutilement donc si l'un des deux n'est pas dispo aucun ne t'est donné.
    Donc tu commences par préparer tes opérations "prendre semaphore 1" et "prendre sémaphore 2" dans un tableau de 2 sembuf puis tu appelles "semop()" en lui passant le tableau et en lui indiquant qu'il y a 2 opérations à faire.
    Conclusion => comme semop() peut traiter en un coup "n" opérations il te faut donc lui indiquer ce "n" (dans ton cas "1").

  4. #4
    Membre habitué
    Inscrit en
    Janvier 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 293
    Points : 188
    Points
    188
    Par défaut
    j'ai compris, merci pour les réponses

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

Discussions similaires

  1. Probleme des semaphores sous linux
    Par hacamzig dans le forum Linux
    Réponses: 0
    Dernier message: 01/04/2010, 11h40
  2. [Série] Accès au port série sous linux
    Par ghost dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 10/10/2007, 10h43
  3. Comment désinstaller MySQL sous linux
    Par nahmsath dans le forum Installation
    Réponses: 5
    Dernier message: 18/09/2007, 10h46
  4. Réponses: 1
    Dernier message: 16/04/2007, 13h56
  5. Je ne peux établir une connexion cliente sous Linux.
    Par Anonymous dans le forum CORBA
    Réponses: 5
    Dernier message: 16/04/2002, 15h57

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