Advertisement
Guest User

djkfbsvbsl

a guest
Mar 20th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.87 KB | None | 0 0
  1. //Question 2
  2.  
  3. import java.util.concurrent.CyclicBarrier;
  4.  
  5. public class SommesCyclicBarrier{
  6.  
  7. static class ThreadPartielle extends Thread{
  8. private int [] a; // tableau a
  9. private int i; // numero de l'indice à modifier pour ce thread
  10. private CyclicBarrier b;
  11.  
  12. public ThreadPartielle(int tab[], int i, CyclicBarrier b){
  13. this.a = tab;
  14. this.i = i;
  15. this.b = b;
  16. }
  17.  
  18. public void run(){
  19.  
  20. for(int r = 1, s=0; r < a.length; r *= 2){
  21. if(i>=r){
  22. s = a[i-r];
  23. }
  24. //Ajouter une barriere ci car il faut que chaque thread recupere les valeurs à ajouter avant de changer le tableau a
  25. //Assurer que toutes les lectures soient faites avant les écritures
  26. try{
  27. b.await();
  28. }catch(Exception e){
  29. e.printStackTrace();
  30. }
  31. if(i>=r){
  32. a[i] += s;
  33. }
  34. //Assurer que tout le monde écrive avant que quelqu'un ne lise
  35. try{
  36. b.await();
  37. }catch(Exception e){
  38. e.printStackTrace();
  39. }
  40. }
  41.  
  42. }
  43.  
  44. }
  45.  
  46.  
  47. public static void main(String[] args) {
  48. CyclicBarrier cb = new CyclicBarrier(32);
  49.  
  50. int temoin[] = new int[32];
  51. int a[] = new int[32];
  52. for(int i=0; i<32;i++){
  53. a[i] = i;
  54. temoin[i]=i;
  55. }
  56. ThreadPartielle tp [] = new ThreadPartielle[32];
  57.  
  58. for(int i =0; i<32;i++){
  59. tp[i] = new ThreadPartielle(a,i,cb);
  60. tp[i].start();
  61. }
  62. for(int i=0; i<32; i++){
  63. try{
  64. tp[i].join();
  65. }catch(Exception e){
  66. e.printStackTrace();
  67. }
  68. }
  69.  
  70. for(int r=1; r<temoin.length;r*=2){
  71. for(int j=a.length-1; j>=r; j--){
  72. temoin[j] += temoin[j-r];
  73. }
  74. }
  75.  
  76. for(int i=0; i<32;i++){
  77. System.out.println(i + " : " + a[i] + " temoin : " + temoin[i]);
  78. }
  79.  
  80.  
  81.  
  82. }
  83.  
  84.  
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement