Buscar

INE5611 Prova2 20112 Solucao

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 4 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1 
 
 
 
1. Use um código Java para: 
a. Demonstrar a implementação do conceito de “exclusão mútua”. 
Resp: Supomos um buffer chamado “lista”, compartilhado entre várias threads. Com o uso de semáforos, o 
conceito de exclusão mútua foi implementado no método insere: 
s.acquire(); 
 lista.add(i); // seção crítica 
 s.release(); 
 
b. Descrever qual a relação que existe entre o termo “exclusão mútua” e “seção crítica”. 
Seção crítica é o segmento de código no qual um processo realiza a alteração de um recurso compartilhado. Para 
não haver a modificação ou uso do recurso compartilhado de forma desordenada e que provoque condições de 
corrida, é necessário existir a exclusão mútua para que uma thread ou processo use este recurso de forma 
exclusiva em determinado momento. 
 
2. 
import java.util.concurrent.Semaphore; 
public class ClasseT extends Thread { 
 private Semaphore um; 
 private Semaphore dois; 
 private int id; 
 
 public ClasseT(Semaphore um, Semaphore dois, int id) { 
 this.um = um; 
 this.dois = dois; 
 this.id = id; 
 } 
 public void run() { 
 while (true) { 
 try { 
 um.acquire(); 
 } catch (InterruptedException ref) { 
 } 
 System.out.println(" Eu sou a thread " + id); 
 dois.release(); 
 } // end while 
 } // end run 
} 
 
import java.util.concurrent.Semaphore; 
public class Principal { 
 public static void main(String[] args) { 
 Semaphore um = new Semaphore(1); 
 Semaphore dois = new Semaphore(0); 
 Semaphore tres = new Semaphore(0); 
 ClasseT t1 = new ClasseT(um,dois,1); 
 ClasseT t2 = new ClasseT(dois,tres,2); 
 ClasseT t0 = new ClasseT(tres,um,0); 
 t1.start(); 
 t2.start(); 
 t0.start(); 
 }} 
 
 
 
2 
 
3. 
 
 Fila de processos em cada prioridade 
 
Prioridade 1 : P1 – P3 
Prioridade 2 : P4 – P2 
Prioridade 3 : P5 
 
Diagrama de Gantt 
 
P1 P1 P3 P3 P1 P1 P3 P1 P1 P1 P1 P1 P1 P1 P4 P4 P2 P2 P4 P4 P2 P2 P4 P4 P5 P5 P5 P5 P5 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 
 
 
 Chega P4 Chega P2 
 
PROCESSO Tempo de Espera Turnaround 
P1 3 14 
P2 6 10 
P3 4 7 
P4 14 20 
P5 24 29 
 
 
4. Slides 67, 68 e 69 do mat9-slides-INE5611-capitulo4LivroRomulo.pdf do moodle. 
 
 
3 
 
 
 
5. Slide 57 do mat9-slides-INE5611-capitulo4LivroRomulo.pdf do moodle. 
 
Quantum é o valor da fatia de tempo que o processo tem direito de usar a CPU. 
 
 
 
6. 
a. O que faz o método X? 
Insere o valor do parâmetro V no buffer; se o buffer estiver cheio, bloqueia a thread. 
b. O que faz o método Y? 
Remove o valor do buffer e retorna o valor; se o buffer estiver vazio bloqueia a thread. 
c. Qual a função das chamadas wait e notifyAll em cada um dos métodos? 
Wait bloqueia a thread que está tentando inserir no buffer cheio no método X. No método Y, wait 
bloqueia a thread que está tentando “consumir” o valor do buffer vazio. Notifyall em ambos os 
métodos “acorda” alguma thread que esteja dormindo. 
d. Quantas threads podem executar o método X ao mesmo tempo? Explique. 
Apenas uma de cada vez, já que o método é sincronizado (usa a palavra-chave synchronized). 
 
4 
 
 
7. Recuperação individual da nota da Lista de Threads: esta questão vale nota 10. A nota 
alcançada nessa questão será somada com a nota obtida na lista de threads e a soma será 
dividida por 2. 
Considere uma sala de exposições e um conjunto de visitantes. Cada visitante faz o seguinte 
ciclo infinito: entra() numa sala de exposições e sai() dela ao fim de um determinado 
tempo. Cada exposição numa sala começa e acaba a uma hora determinada, e os visitantes só 
podem entrar e sair na hora determinada. Cada sala tem N lugares; se houver mais visitantes, 
estes esperam pela próxima sessão. Elabore a sincronização completa deste cenário usando 
uma das duas alternativas: somente semáforos ou somente sincronização Java (métodos 
sincronizados, wait e notify).

Outros materiais