Posté par benja .
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 ;-)
# semops
Posté par benja . 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;