Baixe o app para aproveitar ainda mais
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).
Compartilhar