Experimentos em coordenação
Esta prática consiste em implementar alguns problemas clássicos de coordenação usando a linguagem Java.
Um exemplo de criação de threads em Java está apresentado a seguir:
- threads.java
public class MyThread extends Thread { int threadID; // construtor MyThread (int ID) { threadID = ID; } // corpo da thread public void run () { int i ; for (i = 0; i< 100 ; i++) System.out.println ("Hello from t" + threadID + "!") ; } // programa principal public static void main (String args[]) { // cria três threads MyThread t1 = new MyThread (1); MyThread t2 = new MyThread (2); MyThread t3 = new MyThread (3); // inicia as três threads t1.start (); t2.start (); t3.start (); } }
Soma multi-thread (50%)
Escrever um programa com threads que incrementam de forma concorrente um contador global inteiro. Use 100 threads, cada uma incrementando o contador 100.000 vezes. Construa uma solução simples, sem controle de concorrência, e outra com controle de concorrência através de um mutex. Compare os resultados obtidos em termos de exatidão do resultado e de velocidade de execução.
O Jantar dos filósofos (25%)
Implemente o problema do Jantar dos Filósofos descrito na aula passada; sem prevenção de impasses (solução básica) e com prevenção de impasses através do algoritmo do saleiro.