Skip to content

Conversation

@precondition
Copy link

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é, or c'est faux.
slide 6 chapitre 7

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 aussi amener certains à croire qu'un entier non-signé est utilisé.

À cause de ça, la condition if du pseudo-code pour sem_wait me semblait être une condition toujours fausse et relevait donc d'une faute de frappe. Ce serait une contradiction car un entier non-signé est toujours forcément ≥0. Quand bien même on décrémenterait un entier non-signé égal à 0, on aura alors à faire à un phénomène d'overflow où la variable prendrait une valeur égale à UINT_MAX (dont la valeur exacte dépendra du nombre de bits), pas à -1.

 int sem_wait(semaphore *s)
 {
  s->val=s->val-1;
  if(s->val<0)
  {
   // Place this thread in s.queue;
   // This thread is blocked;
  }
 }

Ce PR clarifie donc le fait que la valeur du sémaphore est un entier signé qui peut aller dans les nombres négatifs pour éviter que d'autres étudiants fassent dans la même erreur de compréhension que moi.

PS: Les slides ne sont pas open-source, j'imagine ?

@precondition
Copy link
Author

Fermé en faveur d'une approche alternative proposée dans #21

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant