• # semops

    Posté par . En réponse au message Sémaphore en C. Évalué à 1. Dernière modification le 26 décembre 2016 à 06:05.

    Tu as 2 problèmes:
    1. Partager la ressources par X (=3) processus. Chaque processus décrément le SNlibre (en mode bloquant), par contre il ne faut pas oublier d'initialiser le SNlibre à X au début (ce que tu as oublié il me semble: à faire dans le parent, logiquement...).
    2. Trouver un numéro de ressource unique. Je te propose l'algorithme suivant: tu essayes de décrémenter de Y(=X) puis d'incrémenter de Y-1 en mode non bloquant, le tout dans une même semop. Si ça ne marche pas, tu réessaye avec avec Y=Y-1 jusqu'à Y=1... Le numéro de ressource vaut Y. À nouveau il faut penser à mettre le sémaphore à X au début...

    Si je ne m'abuse pas, tu peux combiner 2 et 1 et n'utilise qu'un seul sémaphore... ;-)

    Note: par pitié, éviter ce genre d'horreur (au pire... utilise stdbool). Je te laisse chercher pourquoi ça n'est vraiment pas une bonne idée ;-)


    typedef enum boul
    {true, false} boul;