Vous êtes sur la page 1sur 2

7.

6 Le problme des philosophes


Supposons que plusieurs processus utilisent un ensemble de ressources communes. Les processus doivent continuellement acqurir, utiliser et relcher les ressources. On veut s'assurer qu'un processus ne fera jamais partie d'un interblocage (attendre aprs des processus qui sont eux-mmes bloqus) et qu'il ne sera pas retard indfiniment (n'obtiendra jamais la ressource demande). Une version image de ce problme est prsente sous la forme d'un groupe de philosophes qui mangent du spaghetti. C'est le problme des philosophes ou du dner des philosophes. Le problme s'nonce comme suit. Il y a N philosophes qui passent leur temps soit rflchir soit manger. Chaque philosophe possde une place attitre autour d'une table circulaire. Dans la Figure 1, chaque place est reprsente par une assiette. Il y a un grand bol de spaghetti au centre de la table. Un philosophe doit avoir deux fourchettes pour manger du spaghetti. Cependant, on dispose seulement de N fourchettes. Il y a une fourchette entre 2 assiettes ou entre 2 philosophes. Un philosophe peut seulement prendre la fourchette situe immdiatement sa droite et celle situe immdiatement sa gauche. Tous les processus reprsentant les philosophes sont identiques et font la mme chose. Le processus est une boucle infinie dans laquelle le philosophe est d'abord en train de penser et aprs un certain temps, en train de manger. Il faut faire en sorte que les processus simulent le comportement des philosophes. La Figure 1 prsente le problme avec 4 philosophes. Nous considrerons seulement ce cas particulier montrant 4 philosophes et 4 fourchettes entre les philosophes. Nous pouvons constater que 2 philosophes voisins ne peuvent pas manger en mme temps. Un philosophe a besoin de 2 fourchettes pour manger. Comme il y a un total de 4 fourchettes, seulement 2 philosophes peuvent manger en mme temps. La Figure 1 prsente une solution du problme des philosophes. On utilise un smaphore pour reprsenter chacune des fourchettes. Chaque fourchette est une ressource qui peut tre utilise que par un philosophe la fois. On initialise le smaphore un pour indiquer qu'un seul philosophe peut l'utiliser la fois. Si la fourchette n'est pas utilise, le wait() ne sera pas bloquant. Par contre, si la fourchette est utilise, l'opration wait() suspendra le processus. Le processus bloqu sur le wait() sera rveill seulement quand le philosophe qui possde la fourchette la relche avec une opration signal() sur le smaphore correspondant.
PROBLME DES PHILOSOPHES

A
2

D
Semaphore f1 = 1, f2 = 1, f3 = 1, f4 = 1; Process A
LOOP

B
4

C
Process B
LOOP

Process C
LOOP

Process D
LOOP

Pense
f1.wait() f2.wait()

Pense
f2.wait() f3.wait()

Pense
f3.wait() f4.wait()

Pense
f4.wait() f1.wait()

Mange
f1.signal() f2.signal()

Mange
f2.signal() f3.signal()

Mange
f3.signal() f4.signal()

Mange
f4.signal() f1.signal()

Possibilit d'interblocage

Figure 1: Le problme des philosophes. La solution de la Figure 1 montre qu'un philosophe doit faire un wait() sur chacune des 2 fourchettes qui l'entourent avant de manger. Il peut manger seulement s'il russit avoir les 2 fourchettes. Quand il a fini de manger, il relche les 2 fourchettes avec un signal(). Cette solution simple s'assure qu'un philosophe doit avoir 2 fourchettes pour manger et respecte l'interdpendance entre les processus. Cependant, elle peut produire un interblocage des processus. Supposons que tous les philosophes ont obtenu leur fourchette de droite (premier wait() dans les processus). Alors, aucun philosophe ne peut obtenir la fourchette de gauche manquante. Les philosophes attendent

mutuellement un aprs l'autre. Le processus A attend aprs B, B aprs C, C aprs D et D aprs A. Il y a attente circulaire. Nous avons un interblocage. La Figure 2 prsente une solution sans interblocage. Elle consiste s'assurer qu'au plus 3 philosophes utilisent des fourchettes simultanment. On vite ainsi l'attente circulaire. Les 3 processus qui ont des fourchettes ne pourront pas former une suite circulaire de processus qui s'attendent mutuellement. Il s'agit d'un problme d'exclusion mutuelle avec la modification que 3 processus peuvent excuter le code "mange" en mme temps. On utilise un smaphore "c" qui est initialis 3. Tout au plus, 3 processus pourront faire le wait() sans bloquer.
PROBLME DES PHILOSOPHES

Solution sans interblocage


Semaphore f1 f2 f3 f4 =1 = 1, = 1, = 1;

// autorise 3 philosophes seulement Semaphore c = 3; Process A


LOOP

Process B
LOOP

Process C
LOOP

Process D
LOOP

Pense
c.wait() f1.wait() f2.wait()

Pense
c.wait() f2.wait() f3.wait()

Pense
c.wait() f3.wait() f4.wait()

Pense
c.wait() f4.wait() f1.wait()

Mange
f1.signal() f2.signal() c.signal()

Mange
f2.signal() f3.signal() c.signal()

Mange
f3.signal() f4.signal() c.signal()

Mange
f4.signal() f1.signal() c.signal()

Figure 2: Solution sans interblocage.

Vous aimerez peut-être aussi