12
Instituto de Computação - UFF Drinking Philosophers Algoritmos Distribuídos Professora: Lúcia Drummond

Drinking Philosophers

  • Upload
    tabib

  • View
    25

  • Download
    0

Embed Size (px)

DESCRIPTION

Drinking Philosophers. Algoritmos Distribuídos Professora: Lúcia Drummond. Drinking Philosophers. - PowerPoint PPT Presentation

Citation preview

Page 1: Drinking Philosophers

Instituto de Computação - UFF

Drinking Philosophers

Algoritmos DistribuídosProfessora: Lúcia Drummond

Page 2: Drinking Philosophers

Instituto de Computação - UFF 2

Drinking Philosophers

Os nós podem acessar diferentes subconjuntos de recursos sempre que eles exigem acesso a recursos compartilhados, então passa a existir a possibilidade de que vizinhos em G acessem recursos compartilhados concorrentemente.

A técnica de empregar um único garfo por aresta para assegurar acesso exclusivo aos recursos que dois vizinhos compartilham não é mais suficiente.

Page 3: Drinking Philosophers

Instituto de Computação - UFF 3

Drinking Philosophers

Ao invés disso, associado com todas as arestas deve existir um objeto para cada recurso que os correspondentes vizinhos compartilham.

Tais objetos são garrafas.

Page 4: Drinking Philosophers

Instituto de Computação - UFF 4

Algoritmo Drinking _Philosophers

Variáveis

thirstyi = false;

holds_bottlei jk

= false para todo nj∈ Neigi e todo bk ∈ Bi

j;

holds_turni j = false para todo nj∈ Neigi;

owes_bottlei jk

= false para todo nj∈ Neigi e todo bk ∈ Bi

j;

needs_bottlei jk

= false para todo nj∈ Neigi e todo bk ∈ Bi

j;

Xi=0;

Yi=0;

Page 5: Drinking Philosophers

Instituto de Computação - UFF 5

Algoritmo Drinking _Philosophers

Algoritmo

(1)Input:msgi = nil;

Ação quando not thirsty e necessita-se do acesso ao recurso compartilhado:thirstyi := true;

needs_bottleijk:= true para todo nj ∈ Neigi e

todo bk ∈ Bij tal que acesso ao recurso que

bk representa é necessário;

Page 6: Drinking Philosophers

Instituto de Computação - UFF 6

Algoritmo Drinking _Philosophers

para todo nj ∈ Neigi tal que existe bk ∈ Bij com

needs_bootleijk=true e holds_bottlei

jk=false do

begin Seja Xi o subconjuntos de Bi

j tal que bk ∈ Xi se e somente se needs_bottlei

jk=true e holds_bottlei

jk=false;

Envie request(Xi) para todo nj;

Xi;=0;

end

Page 7: Drinking Philosophers

Instituto de Computação - UFF 7

Algoritmo Drinking _Philosophers

Algoritmo (cont)

(2)Input:msgi = request(X) tal que origemi(msgi)=nj;

Ação: para todo bk ∈ X do

if not thirstyi or not holds_turnij or not

needs_bottleijk then

begin holds_bottlei

jk:=false;

Xi:=Xi ∪ {bk};

if thirsty and needs_bottleijk then

Yi:=Yi ∪ {bk}; end

Page 8: Drinking Philosophers

Instituto de Computação - UFF 8

Algoritmo Drinking _Philosophers

else owes_bottlei

jk:=true;

if Xi ≠0 then begin if Yi = 0 then

Envie bottle(Xi,nil) para nj; else begin Envie bottle(Xi,request(Yi)) para nj;

Yi:=0; end Xi:=0; end

Page 9: Drinking Philosophers

Instituto de Computação - UFF 9

Algoritmo Drinking _Philosophers

Algoritmo (cont)

(3)Input:msgi = bottle(X,t) tal que origemi(msgi)=nj;

Ação: holds_bottlei

jk:= true para todo bk ∈ X;

if t = turn then holds_turnij:= true;

if t = request(Y) then owes_bottlei

jk:=true para todo bk ∈ Y;

if holds_bottleikl para todo nk ∈ Neigi e todo

bl ∈ Bik then

Page 10: Drinking Philosophers

Instituto de Computação - UFF 10

Algoritmo Drinking _Philosophers

begin acessa recursos compartilhados; thirstyi:=false;

para todo nk ∈ Neigi do

if holds_turnik then

begin holds_turni

k:=false;

para todo bl ∈ Bik do

if owes_bottleikl then

begin owes_bottlei

kl:=false;

holds_bottleikl:=false;

Xi:=Xi ∪ {bl}; end

Page 11: Drinking Philosophers

Instituto de Computação - UFF 11

Algoritmo Drinking _Philosophers

if Xi ≠ 0 then

begin Envie bottle(Xi,turn)

para nk;

Xi:=0;

end else Envie turn para nk;

end end

Page 12: Drinking Philosophers

Instituto de Computação - UFF 12

Algoritmo Drinking _Philosophers

Algoritmo (cont)

(4)Input:msgi = turn tal que origemi(msgi)=nj;

Ação: holds_turni

j:= true;