Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- 4. La traverse de babouins.
- Dans le parc national Kruger en Afrique, il existe un profond canyon au-dessus duquel
- on a tendu une corde de fa¸con `a ce que les babouins puissent le traverser `a bout de
- bras. Plusieurs babouins peuvent traverser en mˆeme temps, pourvu qu’ils aillent tous
- dans la mˆeme direction. Cependant, la corde n’est pas assez forte pour supporter le
- poids de plus de cinq babouins.
- Si des babouins, se dirigeant dans des directions oppos´ees, se trouvent sur la corde
- au mˆeme moment, cela d´eclenche une bagarre qui entraˆınent les babouins dans une
- chute mortelle au fond du canyon. En effet, ils n’ont pas la possibilit´e de passer les uns
- par-dessus les autres alors qu’ils sont suspendus au-dessus du canyon. Si un babouin
- souhaite traverser le canyon, il doit donc d’abord v´erifier qu’aucun autre babouin ne
- traverse en sens inverse.
- Au moyen de s´emaphores, ´ecrivez un programme pour synchroniser le passage des
- babouins. Votre solution doit assurer qu’il n’y aura pas de famine, i.e. que l’arriv´ee
- continue de babouins provenant d’une mˆeme direction ne bloquera pas le passage en
- permanence aux babouins essayant de passer dans l’autre direction.
- */
- direction = left ou right
- int nbBabouin = 0
- mutex request
- mutex pont
- mutex queue
- process BabouinVersGauche(0 to n):
- attente = true
- while (attente):
- P(request)
- if (nbBabouin == 0)
- P(pont)
- attente = false
- nbBabouin++
- if (nbBabouin < 5 && direction == gauche)
- attente = false
- nbBabouin++
- V(request)
- P(queue) --Unsure about this (Evite l'attente active mais brise peut-etre l'algo)
- Traverser()
- P(request)
- nbBabouin--
- if (nbBabouin == 0)
- V(pont)
- V(request)
- V(queue) --Unsure about this
- process BabouinVersDroite(0 to n): (meme chose)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement