Multithreading Parte 2

838 palavras 4 páginas
Multithreading
- parte 2 - Tecnologia em Análise e
Desenvolvimento de Sistemas Profa.: Daniela Costa Terra
Email: daniela.terra@ifmg.edu.br

1

Threads Produtor e Consumidor
(buffer circular)
 Quando threads produtoras e consumidoras têm tempos de execução comparáveis (equivalentes) torna-se mais eficiente prover

um buffer com um número extra de posições
 Neste caso, os tempos de espera em fila é reduzido, melhorando a eficiência do programa
 Se as threads produtoras são muito mais rápidas que as threads consumidoras apenas um buffer de tamanho infinito resolveria

 Se as threads consumidoras são muito mais rápidas que as threads produtoras uma única posição no buffer é necessária

2



Produtor e Consumidor em buffer circular

import java.util.concurrent.locks.*; import static java.lang.System.*; public class CircularBuffer { private Lock accessLock = new ReentrantLock(); private Condition canWrite = accessLock.newCondition(); private Condition canRead = accessLock.newCondition(); private int[] buffer = {-1,-1,-1}; private int occupiedBuffers = 0; private int indexWrite = 0; private int indexRead = 0; public void set(int value){ accessLock.lock(); try{ while(occupiedBuffers == buffer.length){ out.println("Buffer Cheio! Produtor em await..."); canWrite.await(); }
3

buffer[indexWrite] = value; indexWrite = (indexWrite + 1) % buffer.length; occupiedBuffers++; displayState("Produtor escreve "+ value); canRead.signal(); }catch(InterruptedException e){
e.printStackTrace();
} finally{ accessLock.unlock();
}
}

4

public int get(){ int readValue = Integer.MIN_VALUE; accessLock.lock(); try{ while (occupiedBuffers == 0){ out.println("Buffer vazio! Consumidor esperando."); canRead.await(); } readValue = buffer[indexRead]; indexRead = (indexRead + 1) % buffer.length; occupiedBuffers--; displayState("Consumidor le "+ readValue); canWrite.signal(); }catch(InterruptedException e){
e.printStackTrace();
} finally{ accessLock.unlock();
}
return readValue;
}
5

public

Relacionados

  • java
    2107 palavras | 9 páginas
  • Questionário de arquitetura de computadores
    2589 palavras | 11 páginas
  • 2u00BA TP Arquitetura Henrique e Raellen 1
    3920 palavras | 16 páginas
  • Multithreading Parte 1
    2298 palavras | 10 páginas
  • Informação
    3531 palavras | 15 páginas
  • Hyper-Threading
    1659 palavras | 7 páginas
  • Multiprocessadores e clusters
    23132 palavras | 93 páginas
  • 498837968
    1817 palavras | 8 páginas
  • Thread SO
    2961 palavras | 12 páginas
  • Descri O Ruby
    673 palavras | 3 páginas