Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouRebeca Festa Alterado mais de 11 anos atrás
1
Instituto de Computação - UFF Drinking Philosophers Algoritmos Distribuídos Professora: Lúcia Drummond
2
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.
3
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.
4
Instituto de Computação - UFF 4 Algoritmo Drinking _Philosophers Variáveis thirsty i = false; holds_bottle i jk = false para todo n j Neig i e todo b k B i j ; holds_turn i j = false para todo n j Neig i ; owes_bottle i jk = false para todo n j Neig i e todo b k B i j ; needs_bottle i jk = false para todo n j Neig i e todo b k B i j ; X i =0; Y i =0;
5
Instituto de Computação - UFF 5 Algoritmo Drinking _Philosophers Algoritmo (1)Input: msg i = nil; Ação quando not thirsty e necessita-se do acesso ao recurso compartilhado: thirsty i := true; needs_bottle i jk := true para todo n j Neig i e todo b k B i j tal que acesso ao recurso que b k representa é necessário;
6
Instituto de Computação - UFF 6 Algoritmo Drinking _Philosophers para todo n j Neig i tal que existe b k B i j com needs_bootle i jk =true e holds_bottle i jk =false do begin Seja X i o subconjuntos de B i j tal que b k X i se e somente se needs_bottle i jk =true e holds_bottle i jk =false; Envie request(X i ) para todo n j ; X i; =0; end
7
Instituto de Computação - UFF 7 Algoritmo Drinking _Philosophers Algoritmo (cont) (2)Input: msg i = request(X) tal que origem i (msg i )=n j ; Ação: para todo b k X do if not thirsty i or not holds_turn i j or not needs_bottle i jk then begin holds_bottle i jk :=false; X i :=X i {b k }; if thirsty and needs_bottle i jk then Y i :=Y i {b k }; end
8
Instituto de Computação - UFF 8 Algoritmo Drinking _Philosophers else owes_bottle i jk :=true; if X i 0 then begin if Y i = 0 then Envie bottle(X i,nil) para n j ; else begin Envie bottle(X i,request(Y i )) para n j; Y i :=0; end X i :=0; end
9
Instituto de Computação - UFF 9 Algoritmo Drinking _Philosophers Algoritmo (cont) (3)Input: msg i = bottle(X,t) tal que origem i (msg i )=n j ; Ação: holds_bottle i jk := true para todo b k X; if t = turn then holds_turn i j := true; if t = request(Y) then owes_bottle i jk :=true para todo b k Y; if holds_bottle i kl para todo n k Neig i e todo b l B i k then
10
Instituto de Computação - UFF 10 Algoritmo Drinking _Philosophers begin acessa recursos compartilhados; thirsty i :=false; para todo n k Neig i do if holds_turn i k then begin holds_turn i k :=false; para todo b l B i k do if owes_bottle i kl then begin owes_bottle i kl :=false; holds_bottle i kl :=false; X i :=X i {b l }; end
11
Instituto de Computação - UFF 11 Algoritmo Drinking _Philosophers if X i 0 then begin Envie bottle(X i,turn) para n k ; X i :=0; end else Envie turn para n k ; end
12
Instituto de Computação - UFF 12 Algoritmo Drinking _Philosophers Algoritmo (cont) (4)Input: msg i = turn tal que origem i (msg i )=n j ; Ação: holds_turn i j := true;
Apresentações semelhantes
© 2025 SlidePlayer.com.br Inc.
All rights reserved.