exercícios sistemas operacionais

Upload: diogocabral

Post on 04-Mar-2016

213 views

Category:

Documents


0 download

DESCRIPTION

Trabalho da disciplina de Sistemas Operacionais

TRANSCRIPT

  • UNIVERSIDADE FEDERAL DE ALAGOASSISTEMAS OPERACIONAISALUNO: DIOGO CABRAL DA SILVA

    Exerccios 1 Thread em Java

    Q1 - A herana da classe Thread restringe uma thread em um nico objeto filho, no permitindo criar classes filhas que sejam threads, porm, a interface Runnable que qualquer classe filha genrica implemente sua prrpia Thread . vantajoso usar Runnable quando no se deseja implementar muitas atividades, visto que o mtodo run() s pode ser iniciado uma vez, proveitoso iniciar classes filhas de threads em implementaes Runnable aumentando a segmentao do programa.

    Q2 -public class Clock extends Applet implements Runnable {

    private Thread clockThread = null;

    public void start() {if (clockThread == null) {

    clockThread = new Thread(this, "Clock");clockThread.start();

    }}public void run() {

    Thread myThread = Thread.currentThread();while (clockThread == myThread) {

    repaint();try {

    Thread.sleep(1000);} catch (InterruptedException e){}}

    }...

    }

    No exemplo acima, foi possvel implementar numa herana da classe Applet uma nova Thread, visto que Java no suporta herana multipla, seria impossvel criar uma Thread Herdando de Thread.

    Q3 - perguntado quantas Threads o usurio quer usar:

    How many threads do you want to use (1 to 25) ?

    Logo aps, a entrada validada e o programa segue (Supondo que a entrada foi 10):

    Creating 10 primecounting threads...

    Aps isto, cada thread exibe os nmeros primos de 2 at 1000000 causando uma baguna na tela

  • Q4 - No possvel realizar esse tipo de teste pois o cdigo descrito est incompleto e no compila. Porm, possvel deduzir que o tempo de execuo diretamente proporcional ao nmero de Threads, pois a mesma atividade acaba sendo executada mais vezes.

    Q5 - No exemplo da questo 2 foi usado o mtodo sleep para pausar o loop While e apenas repintar o relgio 1 segundo depois, observando que esse sleep() apenas interrompe a Thread em particular e no a execuo completa do programa.

    Q6 - Pode acontecer que o valor acessado por uma Thread fique desatualizado, fazendo com que uma Thread atualize o contador para um valor j existente, causando um erro de sincronismo.

    Q7 - Java possui um mecanismo de sincronizao de Threads para tratar erros de acesso concorrente.

    No exemplo abaixo temos o seguinte objeto:

    public class ContaCorrente {float saldo = 0;float tmp;

    public float getSaldo(){return saldo;

    }public void depositar(float valor){

    tmp = getSaldo();saldo = tmp+valor;

    }public void sacar(float valor){

    tmp = getSaldo();saldo = tmp-tmp - valor;

    }}

    Se duas threads acessarem os mtodos depositar() e sacar() ao mesmo tempo, geraria inconsistncia no resultado final das operaes (mesmo no causando erro). Para resolver isso, usa-se a palavra reservada syncronized que bloqueia um mtodo para uma nica thread, nesse caso, seria adicionadosyncronized nos mtodos depositar e sacar, enfileirando a execuo dos mtodos pelas Threads dessa forma:

    public synchronized void depositar(float valor){//

    }public synchronized void sacar(float valor){

    // }