SyllabusC_Systeme
SyllabusC_Systeme copied to clipboard
Correction du pseudocode `sem_wait` et `sem_post`
La diapositive 6 du chapitre 7 sur les sémaphores dit très clairement que le type de la valeur du sémaphore est un entier non-signé.

Le syllabus évite de dire que c'est un entier non-signé mais la formulation « un entier qui stocke la valeur, positive ou nulle, du sémaphore » pourrait sous-entendre qu'un entier non-signé est utilisé.
En outre, nous pouvons aussi lire dans man sem_overview que la valeur d'un sémaphore ne peut pas descendre en dessous de zéro:
A semaphore is an integer whose value is never allowed to fall below zero. Two operations can be performed on semaphores: increment the value by one (sem_post(3)); and decrement the semaphore value by one (sem_wait(3)). If the value of a semaphore is currently zero, then a sem_wait(3) operation will block until the value becomes greater than zero.
Si on suppose que la valeur est un entier non-signé, la condition if(s->val<0) du pseudo-code fourni pour sem_wait est une contradiction; une condition jamais satisfaite.
Idem pour if(s->val<=0) dans sem_post. Il est impossible d'incrémenter un entier non-signé et d'obtenir un nombre inférieur à 0.
Ce PR met à jour le pseudo-code de sem_wait en décrémentant la valeur uniquement si celle-ci est strictement supérieure à 0 et en bloquant le thread si la valeur est égale à 0 (une condition réalisable, contrairement à s->val<0) et enlève le if dans sem_post.