Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Question 2
- import java.util.concurrent.CyclicBarrier;
- public class SommesCyclicBarrier{
- static class ThreadPartielle extends Thread{
- private int [] a; // tableau a
- private int i; // numero de l'indice à modifier pour ce thread
- private CyclicBarrier b;
- public ThreadPartielle(int tab[], int i, CyclicBarrier b){
- this.a = tab;
- this.i = i;
- this.b = b;
- }
- public void run(){
- for(int r = 1, s=0; r < a.length; r *= 2){
- if(i>=r){
- s = a[i-r];
- }
- //Ajouter une barriere ci car il faut que chaque thread recupere les valeurs à ajouter avant de changer le tableau a
- //Assurer que toutes les lectures soient faites avant les écritures
- try{
- b.await();
- }catch(Exception e){
- e.printStackTrace();
- }
- if(i>=r){
- a[i] += s;
- }
- //Assurer que tout le monde écrive avant que quelqu'un ne lise
- try{
- b.await();
- }catch(Exception e){
- e.printStackTrace();
- }
- }
- }
- }
- public static void main(String[] args) {
- CyclicBarrier cb = new CyclicBarrier(32);
- int temoin[] = new int[32];
- int a[] = new int[32];
- for(int i=0; i<32;i++){
- a[i] = i;
- temoin[i]=i;
- }
- ThreadPartielle tp [] = new ThreadPartielle[32];
- for(int i =0; i<32;i++){
- tp[i] = new ThreadPartielle(a,i,cb);
- tp[i].start();
- }
- for(int i=0; i<32; i++){
- try{
- tp[i].join();
- }catch(Exception e){
- e.printStackTrace();
- }
- }
- for(int r=1; r<temoin.length;r*=2){
- for(int j=a.length-1; j>=r; j--){
- temoin[j] += temoin[j-r];
- }
- }
- for(int i=0; i<32;i++){
- System.out.println(i + " : " + a[i] + " temoin : " + temoin[i]);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement