1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    mars 2015
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2015
    Messages : 170
    Points : 77
    Points
    77

    Par défaut semaphores V(sem) et P(sem)

    Bonjour

    J'ai une simple question peut-être triviale (en langage C et "théorie" de la gestion des processus et sémaphores):
    J'aurais pu mettre du code semget, semctl,...

    Que ce soit pour un simple sémaphore file SEM ou un sémaphore MUTEX :
    - L'opération V(SEM) ou V(MUTEX) peut elle être "exécuter/appeler" avant P(SEM) ou P(MUTEX) ?
    - Que ce soit "théorique" ou en langage C ?
    Je demande ceci pour comprendre dans un exo que le programme principal ne peut pas être celui qui commence par une opération V(sem) ou V(mutex)?


    Merci d'avance

  2. #2
    Membre expérimenté
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    avril 2016
    Messages
    344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : avril 2016
    Messages : 344
    Points : 1 474
    Points
    1 474

    Par défaut

    Bonjour,

    En général, quand une ressource est accessible depuis plusieurs threads, un thread qui veut utiliser la ressource la "réserve" (ex : blocage de mutex, P sur sémaphore ou attente de réception d'un signal), puis l'utilise, puis la libère (ex : déblocage de mutex, V sur sémaphore ou envoi de signal à un autre thread pour dire que ce dernier peut utiliser la ressource).

    Mais il existe des cas où la "réservation" et la libération d'une même ressource se font dans des threads séparés.
    Par exemple, si on implémente le problème des producteurs et des consommateurs avec des sémaphores, on a un sémaphore fillCount qui représente le nombre d'emplacement occupés dans un tampon, un autre sémaphore emptyCount qui représente le nombre d'emplacements libres de ce tampon et un mutex qui permet de modifier le tampon.
    Un producteur qui ajoute quelque chose dans le tampon fait successivement P(emptyCount), Bloquer(mutex), AjouterQch(), Debloquer(mutex) puis V(fillCount). Au final, il a réservé de la ressource "nombre d'emplacements vides" et a libéré de la ressource "nombre d'emplacements pleins".
    Un consommateur qui enlève quelque chose dans le tampon fait successivement P(fillCount), Bloquer(mutex), RetirerQch(), Debloquer(mutex) puis V(emptyCount). Au final, il a réservé de la ressource "nombre d'emplacements pleins" et a libéré de la ressource "nombre d'emplacements vides".
    Ainsi, quand le tampon est plein, les producteurs se bloquent avec P(emptyCount) et les consommateurs les débloquent avec V(emptyCount). Quand le tampon est vide, les consommateurs se bloquent avec P(fillCount) et les producteurs les débloquent avec V(fillCount).

    Pour répondre à ta question, oui, on peut avoir un V appelé avant un P sur la même ressource. Dans mon exemple, on peut avoir V(fillCount) qui est appelé par un producteur puis P(filCount) qui est appelé par un consommateur.

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    mars 2015
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2015
    Messages : 170
    Points : 77
    Points
    77

    Par défaut

    oui un V(sem) peut être appelé avant un P(sem) mais je connais aussi l'exemple producteur-consommateur

    mais ma question la plus importante est que même si le tampon est plein ou vide.
    un V(sem) doit être précédé d'un P(sem) ce qui permet de savoir où le programme ou la procédure appelante est principale.
    Est ce correct de raisonner ainsi ?
    ex:
    Si le tampon est plein alors la procedure producteur est la principale à regarder dans un exo et inversement si le tampon est vide.
    Maintenant cela me pose un problème nouveau de savoir si on est dans un cas producteur-consommateur et un cas lecteurs-redacteur.

    Comment identifier les deux cas, les deux situations quand un exo est un peu alambiqué utiliserait des termes différents ?

Discussions similaires

  1. SEM 5.2 : courbes de lift dans le noeud "Assesment"
    Par ALLB dans le forum Outils BI
    Réponses: 4
    Dernier message: 20/02/2009, 17h03
  2. Clefs primaire en format aa/sem/numéro
    Par Salsaboy60 dans le forum IHM
    Réponses: 8
    Dernier message: 10/02/2009, 21h10
  3. Graphique dans SAS - v9.1 SAS/GRAPH ou SEM
    Par ALLB dans le forum ODS et reporting
    Réponses: 4
    Dernier message: 04/12/2008, 18h37
  4. Option de compilation gcc : sem.h
    Par Luther13 dans le forum Linux
    Réponses: 8
    Dernier message: 29/12/2004, 12h29

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